这与此question非常相似,但我有兴趣知道如何忽略某些分支的已提交git文件但不能忽略其他分支,或者找到我的问题的其他解决方案。
我们有一个配置文件,每个客户都有所不同。我们使用每个客户的分支在git中跟踪这个。同样,每个开发人员都有自己的自定义开发环境,需要一个唯一的配置文件。
我为我的环境创建了一个分支并尝试使用git update-index --assume-unchanged [path]
(来自此answer),但意识到虽然它忽略了我的分支中的更改,但它在更改分支时从不更新文件。这非常适合更换到另一个开发人员的分支,但是如果我要更改为客户的分支,我需要更改配置文件,因为我想将代码指向他们的数据库,例如
有没有办法忽略某些分支的配置文件而不是其他分支?
如果没有,我想到了几种替代方法,但每种方法都有其缺点:
git update-index --no-assume-unchanged
。这有效,但我知道我可能会忘记这一点,并且可能不会立即明显使用了错误的配置文件。git update-index
并在切换开发人员分支后将配置文件更改回我的设置。我偶尔也会忘记这样做。感谢您提出任何其他想法。
答案 0 :(得分: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
条目不再指向它。或者,您可以将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
无论哪种方式,Git现在始终跟踪etc/app.conf
是否在开发人员分支或客户分支上,以及您是否使用跟踪(即客户)配置是通过文件中的某个间接处理系统。这应该避免您遇到的忽略与跟踪的争用,并且一旦设置它基本上是自动的,因为符号链接是存储库的一部分。
答案 1 :(得分:0)
我建议另一种更为标准的解决方案我相信:
.conf
文件重命名为.conf.default
.conf
文件添加到所有分支中的.gitignore
(或在master
中执行并合并到所有分支中).conf.default
复制到.conf
post-checkout
挂钩,将.conf.default
复制到.conf
,或让开发人员维护他的.conf
文件(不推送挂钩,他们是按机器定义的)