2017-07-15 116 views
1

我有幾個文件(一個pom.xml和一個appengine-web.xml(GAE配置文件)),我想保留在不同分支的不同狀態同一個項目。前從git中的分支間合併中排除一些文件

類似的問題已經被問和兩個我見過之前提出的解決方案是:

  • git merge --no-commit from-branch,並且,
  • 在同一目錄中創建文件.gitattributes,這條線:filename.ext merge=ours(改寫)

這兩個只在合併期間存在衝突時才保護當前分支中的文件不合並。在FF合併的情況下,當前分支中的版本會被覆蓋。我希望這些文件即使在FF合併的情況下也不會被覆蓋。

沒有辦法保護當前分支中的版本不被合併覆蓋,除非被文件特定的命令調用?

我目前正在訴諸不檢查每個分支文件,將它們放在存儲器中,然後當我回到分支時從那裏恢復。有沒有更高效,更容易出錯的方式?

回答

2

的另一種方法是:

  • 軌道pom.xml
  • 軌道pom.xml.masterpom.xml.mybranch:這樣一來,任何合併不會影響他們,因爲他們是不同的命名。

然後,您可以版本和跟蹤:每個分支

  • 一個pom.xml中(與命名約定以下稱分支)。
  • 能夠採取正確的pom.xml.<abranch>文件取決於當前分支,並生成pom.xml文件(這仍然是未經跟蹤,私人)的腳本
  • 一個.gitignore其忽略結果產生pom.xml文件
  • 一個.gitattribute聲明污跡內容過濾器(見下文)

實際pom.xml的生成是自動通過content filter driver,使用.gitattributes declaration

https://i.stack.imgur.com/tumAc.png
(圖片來自"Customizing Git - Git Attributes"從 「Pro Git book」))

一旦你聲明在您的本地配置文件管理器的內容驅動程序,它會自動運行,git checkout,生成您pom.xml文件給你。
請參閱「Best practice - Git + Build automation - Keeping configs separate」中的完整示例。

appengine-web.xml文件重複相同的想法。

+0

謝謝!我會研究這個並嘗試一下,看起來它可能是我的解決方案。 – markvgti

+0

+1 - 如果你沒有一個可以爲你做的構建系統(或者不想假設或者調用一個構建系統) – torek

+0

混淆,那麼「塗抹過濾器來創建一個未被跟蹤的文件」技巧相當不錯。污跡過濾器是否將文件的名稱「弄髒」?是否還必須定義乾淨的過濾器?可以在未跟蹤的文件上運行塗抹過濾器嗎?創建了特定於分支的文件,但沒有寫出一個pom.xml(在我的情況下,我只需要複製pom.xml。到pom.xml)。 – markvgti