2016-10-01 39 views
0

這是非常相似,這question犯git的文件,但我很想知道如何忽略了一些分支,但不是爲別人一個堅定的git的文件,或者找一些其他的解決辦法,以我的問題。忽略了一些分支機構只能

我們有不同的爲每一個客戶的配置文件。我們使用每個客戶的分支在git中進行跟蹤。同樣,每個開發人員都有自己的自定義開發環境,這需要一個獨特的配置文件。

我爲我的環境創建了一個分支,並嘗試使用git update-index --assume-unchanged [path](來自answer),但意識到雖然它忽略了分支中的更改,但它在更改分支時從不更新文件。這對於轉換到另一個開發人員的分支非常適用,但如果我要更改爲客戶的分支,則需要修改配置文件,因爲我想將代碼指向其數據庫,例如,

有沒有辦法忽略的一些分支機構,但不爲別人的配置文件?

如果不是這樣,我想一對夫婦的替代辦法,但各有其優缺點:

  1. 在切換客戶分支機構,運行git update-index --no-assume-unchanged。這有效,但我知道我很可能會忘記這一點,並且可能不會立即明顯看到使用了錯誤的配置文件。
  2. 根本不要使用git update-index,並在切換開發者分支之後將配置文件更改回我的設置。我也有可能忘記偶爾這樣做。

感謝您的任何其他想法。

回答

0

我建議另一種解決方案是比較標準的,我相信:

  • 重命名.conf文件.conf.default所有分支
  • 添加.conf文件.gitignore所有分支(或做它master和所有合併分支)
  • 更改安裝腳本(最初在生產計算機上運行),將.conf.default複製到.conf
  • 定義每個開發機器上一個post-checkout鉤,那份.conf.default.conf,或讓開發商來維持他.conf文件(鉤不推,他們每臺機器的定義)
+1

好主意,謝謝。無論如何,我們可能正朝着安裝腳本的方向前進。 – rimsky

1

也許你可以使用一個符號鏈接?如果,例如,文件總是在./etc/app.conf在倉庫中找到了你可以把它的符號鏈接未追蹤文件:

$ ln -s dev.conf etc/app.conf 
$ echo 'dev.conf' >etc/.gitignore 
$ git add etc/app.conf etc/.gitignore 
$ git commit -m "point `app.conf' to dev config" 
$ ls -l etc/ 
total 3 
lrwxrwxrwx 1 user users 8 Sep 30 23:31 app.conf -> dev.conf 
-rw-r--r-- 1 user users 13 Sep 30 23:30 dev.conf 

符號鏈接是由git的同時dev.conf被忽略,被跟蹤。當您切換到客戶分支符號鏈接可以切換到一個實際的客戶配置:

$ rm app.conf 
$ echo '# customer config' >etc/app.conf 
$ git add etc/app.conf 
$ git commit -m 'add config for customer A' 
$ ls -l etc/ 
total 3 
-rw-r--r-- 1 user users 18 Sep 30 23:35 app.conf 
-rw-r--r-- 1 user users 13 Sep 30 23:30 dev.conf 

開發人員的自定義配置是保持不變,但app.conf入口不再指向it.Alternatively,你可以離開app.conf一個符號鏈接它重新指向跟蹤客戶的配置:

$ echo '# customer config' >etc/customerA.conf 
$ ln -sf customerA.conf app.conf 
$ git add etc/app.conf 
$ git commit -m "point `app.conf' to customer A config" 
$ ls -l etc/ 
total 4 
lrwxrwxrwx 1 user users 13 Sep 30 23:31 app.conf -> customerA.conf 
-rw-r--r-- 1 user users 18 Sep 30 23:36 customerA.conf 
-rw-r--r-- 1 user users 13 Sep 30 23:30 dev.conf 

無論哪種方式,etc/app.conf現在總是混帳無論是在開發分支或客戶分行跟蹤,無論你使用的是追蹤(即客戶)配置或不通過文件系統中的某些間接處理。這應該避免被忽略的跟蹤競爭,一旦它被設置,它基本上是自動的,因爲符號鏈接是存儲庫的一部分。

+0

有趣的想法,我沒有考慮符號鏈接。但是,我們可能在Windows環境中遇到一些問題。 – rimsky