Как мне изменить путь к файлу в истории git? - PullRequest
4 голосов
/ 17 июня 2010

Вот что у меня есть - git-репо моего кода:

projects
       |-proj1 (no git repo here yet)
             |-subproj1 <- current git repo here

Вот что я хочу - git-репо, который сейчас отслеживает новый проект, использующий мой код:

projects
       |-proj1 <-git repo moved to here, but still tracking files in subproj1
             |-subproj1 (no git repo here)

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

Ответы [ 2 ]

12 голосов
/ 17 июня 2010

Переписать историю можно с помощью команды git filter-branch.Фактически, перемещение дерева каталогов в подкаталог является одним из примеров вырезания и вставки, приведенных в справочной странице git filter-branch:

git filter-branch --index-filter '
  git ls-files -s |
  sed "s-\t\"*-&subproj1/-" |
  GIT_INDEX_FILE=$GIT_INDEX_FILE.new git update-index --index-info &&
  mv $GIT_INDEX_FILE.new $GIT_INDEX_FILE
' HEAD
0 голосов
/ 17 июня 2010

Просто создайте нужную структуру каталогов внутри репозитория - т.е. переместите все файлы и папки в папку «subproj1».

Затем выполните этап добавления всех добавленных и удаленных файлов, и git определит, что они на самом деле переименовывают.:

git add .
git add -u .
git commit -m "Moved to a subfolder"
...