2013-08-22 70 views
2

我有一個git問題,答案應該在這裏的某處stackoverflow,但我找不到它。Git忽略本地文件並始終合併它們

想象一個團隊從事一些有sass或其他建設文件的項目。多個開發人員構建這些文件,並且我們希望構建的文件能夠進行版本化,以防非開發人員想要克隆和檢出項目而無需首先構建。

但是,在項目中包含builded文件會一直創建合併衝突。

我們可以忽略本地更改,只讓主要開發人員檢查他的版本中的時間。

忽略可以用一個用戶自定義的.gitignore文件或進行:

$ git update-index --assume-unchanged path-to-file.css 

但這種拉動時產生了一個問題。

$ git pull 

remote: Counting objects: 30, done. 
remote: Compressing objects: 100% (3/3), done. 
remote: Total 16 (delta 11), reused 16 (delta 11) 
Unpacking objects: 100% (16/16), done. 
From github.com:User/MyProject 
    4e1s389..a231344 development -> origin/master 
Updating 63sdf04..a231344 
error: Your local changes to 'path-to-file.css' would be overwritten by merge. 
Aborting. 
Please, commit your changes or stash them before you can merge. 

一種解決方法將被檢查出文件中的所有時間,例如用別名:

git config --global alias.cobuilded 'checkout path-to-file.css' 

再經過一些工作和建設:

git cobuilded 
git commit -am "work done" 
git pull 
git push 

但要有對於這個問題是一種更簡單的解決方案嗎?

git ignore-this-file-and-always-merge-theirs-from-origin path-to-file.css 

我已經找到this問題和可能的解決方案總是合併他們的。但在我的情況下,合併前的拉已經失敗...

+0

如何將策略更改爲在主分支上完全不提交css文件?您仍然可以通過讓您的首席開發人員,自動構建服務器工具或post-commit-hook在單獨的分支上編譯scss-> css來保持克隆包括css在內的完全工作的repo的理想。這個單獨的分支將永遠不會合並回主,但會不斷將您的主分支合併到它,sass運行它,然後由此產生的CSS承諾。 –

+0

聽起來不錯。當一些最終用戶或測試人員需要一個完整的工作副本時,他們可以克隆該回購,而不是主人!是否有可能通過某種類型的push-hook來完成這個服務器端? – Tieme

回答

1

通常這是一個很好的理念遵循: 不簽入生成的文件。

取而代之的是,提供一個發佈區域或更一般地說是一個發佈機制來滿足您的客戶(又稱消費團隊)。

一般而言,您正在尋找一個部署系統,而不是版本控制系統。不過,你可以將兩者結合起來。 git不是一個部署系統。雖然承認它可以走很長的路,但有一些延伸到這個方向,而我自己有時故意濫用它出於方便的目的。

一種方法是使用每次在某個分支上發生提交(或推送)時觸發的自動構建系統。有可用的「持續集成」工具的開源工具。 Git提供鉤子以觸發例如推入回購:$GIT_DIR/hooks/post-receive。這裏有一個很好的example for sending emails,可以修改爲export a release to a filesystem area。之後,您可以觸發該區域的構建過程。

或者,您可以修改您現有的構建過程以包含最終構建目標。這個會將構建目錄的副本導出到發佈區域。應該手動觸發目標,並且只有在測試通過時。

您的項目可能包含一個名爲「物料清單」(例如「release.bom」)的版本控制文件,其中列出了所有需要複製到發佈區域的文件(具有相對路徑) 。這樣,你避免意外地沒有人有興趣的對象或臨時文件弄亂釋放區域。

如果它只是被其他球隊,也許一個簡單的rsync內部使用,任選與--exclude-from=FILE選項和排除在git控制下的配置文件就足夠了。搜索「rsync過濾規則」以獲取有關其語法的更多信息。

相關問題