2010-10-16 75 views
4

我的資料庫看起來像這樣。如何將一個項目的新版本導入到我的git存儲庫中?

v1 - A - B - C ... 

在提交v1代表upstream-project-foo-0.9.8.tar.gz內容和提交A,B ......是我的修改。

目標是升級我的upstream-project副本並將提交A,B,C ...移植到它。

如何將upstream-project tarball的新版本作爲另一個分支獲取到我的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

在解壓tarball之前,你可能想要'git rm -r .'(這樣* v1 * commit中存在但不存在於新的tarball中的路徑名(即已刪除/重命名的文件)不會保留在*上游*分支)。 – 2010-10-16 22:36:42

+1

@Chris我的理解是,添加-A涵蓋了每個這篇文章:http://stackoverflow.com/questions/572549/difference-of-git-add-a-and-git-add – 2010-10-17 00:58:59

+1

圖像兩個tarballs:'oldversion .tar.gz'具有文件'a'和'b'; 'newversion.tar.gz'有文件'a'和'c'(不是'b')。如果你只是在「舊」之上解壓「新」,你將同時擁有「b」和「c」。您需要清除任何「舊」,但不是「新」的東西。最簡單的方法是刪除「舊」的所有內容,然後解壓縮(並通過「-A」添加任何附帶「新」的內容)。 'git add -A'會從工作樹中不存在的索引路徑名中刪除,但如果你只是將後者解壓到前者,它不能識別「舊」但不是「新」的路徑名。 – 2010-10-17 04:59:54