Как мне переместить мой git-репо на более низкий уровень в дереве каталогов? - PullRequest
2 голосов
/ 11 января 2011

В настоящее время я пишу приложение на C # с использованием Visual Studio.Таким образом, VS2010 создал каталог Solution с каталогами моего проекта внутри.Моя иерархия выглядит следующим образом:

Solution  
  .git
  project1
  project2

Я хотел бы сделать так:

Solution
  Project 1
    .git
  Project 2

На данный момент файлы в решении отслеживаютсяза исключением проекта 2 (например, такой как project.sln).Есть ли способ, которым я могу сделать это без переписывания истории?

Заранее спасибо.

Ответы [ 4 ]

3 голосов
/ 12 января 2011

Это было на самом деле SethRobinson на #git@freenode.net, но вот его решение:

Шаг первый, переместите все дерево git в подкаталог:

mkdir .solution;
mv Solution .solution/Project1; 
mv .solution Solution; 
mkdir Solution/Project2

Шаг второй, скажите git для продвижения подкаталога в корень:

cd Project1; 
mkdir .foo; 
mv * .foo; 
cd .foo; 
mv Project1/* ..; 
cd ..; 
rm -rf .foo; 
git add -A .; 
git commit -a -m "Promoted Project1 to root"
1 голос
/ 12 января 2011

Если я правильно понимаю, отслеживаемые файлы в вашем хранилище в настоящее время состоят из файлов и каталогов, все в подкаталоге "project1".Так как все находится в подкаталоге project1, вы, по сути, просто хотели бы запустить свой репозиторий там.Это правильно?

Если это так, то вы не можете сделать это без (1) переписывания истории вашего проекта (что-то может помочь git filter-branch) или (2) добавления истории, добавив коммит, которыйперемещает все файлы.

По сути, вы не можете задним числом изменить вещи без изменения идентификаторов фиксации;это особенность Git.Но ваша ситуация является адресуемой.Просто дайте нам знать, какой вариант вы предпочитаете, и мы будем рады помочь.

0 голосов
/ 12 января 2011

git filter-branch --subdirectory-filter Project\ 1 HEAD

Это действительно корректирует историю.

Я проверил это так:

root/
  .git
  folder/
    index

git filter-branch --subdirectory-filter folder HEAD

И получил:

root/
  .git
  index
0 голосов
/ 11 января 2011

если проект 2 вообще не отслеживается, я думаю, вы просто сможете переместить его туда, где вы хотите. Git отслеживает изменения содержимого отдельно от древовидной структуры, поэтому он будет видеть файлы, только что перемещенные, но без изменения содержимого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...