2012-10-02 78 views
0

我在一個巨大的項目上工作,實際上只需要它的某些目錄。所以我的計劃是這樣的:部分重建項目

project 
|- a/ 
|- b/ 
\- foo 

然而,上游項目的樣子:

project 
|- a/ 
|- b/ 
|- c/ 
|- foo 
\- bar 

所以我在我的.gitignore:

c/ 
bar 

不過,我現在想rebase上游到主上,我希望能夠告訴git應用於bar,c/*或任何在.gitignore中的東西的補丁/ hunk應該被自動跳過。但是,應該小心,在foo和bar中更改hunk的單個修補程序只能在foo中應用並且在bar中忽略(不要忽略整個修補程序)。

有沒有辦法做到這一點?

+1

如果我正確理解這一點,你不想在新的上游分支_upstream'_忽略文件。那麼,爲什麼不做一個正常的git rebase,然後使用新的提交從_upstream'_中刪除所有剩餘的不需要的文件? – Michael

回答

1

Git在「提交對象」上運行,而不是文件/目錄。每個提交對象都有一個唯一的提交ID,它是其先前提交ID的hash以及該提交的更改。

這意味着忽略某些文件/目錄會創建一個不同的提交ID - 因此它基本上等同於重新規劃所有上游更改,然後創建一個新的提交,刪除所有不喜歡的文件。

你可以在本地使用一些腳本來做到這一點,但是如果你這樣做的話,你本地存儲庫中的每一次提交都會與服務器上的版本不同,所以你每次需要合併時都需要合併改變/推動上游。

也許你可以說服上游項目的維護人員將其拆分成更小的子模塊?

0

對不起,我想你必須自己過濾。這沒有git命令。

通過與git format-patch出口試試你的運氣,做一個difffiltergit am他們再次。