2010-10-16 2 views
4

Мой репозиторий выглядит так.Как импортировать новую версию проекта в мой репозиторий git?

v1 - A - B - C ... 

где фиксации v1 представляет содержимое upstream-project-foo-0.9.8.tar.gz и совершающее A, B ... мои модификации.

Целью является обновление моей копии upstream-project и перенос коммитов A, B, C ... на нее.

Как получить новую версию tarball upstream-project в мой репозиторий git как еще одну ветку? Или я должен рассмотреть возможность создания второго git-хранилища?

ответ

3

создать новую ветку из v1 и извлечь новую версию там.

git checkout -b upstream <v1> 
tar -xzvf newversion.tar.gz 
git add -A 
git commit 

Затем вы можете объединить изменения между версиями в свою основную ветку, где находятся ваши обновления.

git checkout master 
git merge upstream 

Вы также можете создать ответвление от C (или что ваша последняя версия), чтобы объединить обновления, а затем объединить третью ветку обратно в ваш мастер, когда вы закончите.

+1

Возможно, вы захотите «git rm -r.» Перед извлечением tarball (так что имена путей, которые существовали в * v1 * commit, но не присутствуют в новом архиве (т. Е. Удаленные/переименованные файлы), не сохраняются в * вверх по течению * ветка). –

+1

@ Chris Мое понимание заключается в том, что add -A охватывает этот пост: http://stackoverflow.com/questions/572549/difference-of-git-add-a-and-git-add –

+1

Изображение двух архивов: 'oldversion .tar.gz' имеет файлы 'a' и' b'; 'newversion.tar.gz' имеет файлы' a' и 'c' (нет' b'). Если вы просто распакуете «новый» поверх «старого», у вас будут как 'b', так и' c'. Вам нужно очистить все, что находится в «старом», но не в «новом». Самый простой способ сделать это - удалить все, что было в «старом», а затем распаковать (и добавить через «-A') все, что появилось с« новым ». 'git add -A' удалит из имен указателей, которые не существуют в рабочем дереве, но он не может идентифицировать имена путей, которые были в« старых », но не в« новых », если вы просто распаковываете более позднюю версию поверх первой. –

Смежные вопросы