从 Git 中排除文件但保留本地更改

4
让我们设定以下场景:
我们是一个小型开发团队,每个人都在自己的操作系统上编码(OSX和Ubuntu)。应用程序代码中的某些配置文件适用于其中一个系统,而其他配置文件则是特定于某个系统的。我们在Github上共享同一个代码库,但不想混合配置文件(也为了防止出现意外行为),只将它们存储在需要它们的特定机器上。
一种明显的方法是将这些目录添加到git忽略文件中,但这样做也会排除对该文件的错误修复;这显然不是一个理想的解决方案。
有没有一种好的方法可以在确保无需在每次提交时手动排除文件的情况下更改文件,并在分支之间保留本地更改并仍然接收“更新”呢?

3
换句话说,您希望将文件从“git add”中排除,但不要将其从“git pull”中排除? - John Zwinck
是的,那正是我想做的。 - Severin
1个回答

1
创建并跟踪所有特定于系统的配置文件版本,例如:
project/
    config1.osx.txt
    config1.linux.txt
    config2.osx.txt
    config2.linux.txt

然后,每个开发者会根据需要在自己的系统上创建到相应配置文件的符号链接:

$ ln -s config1.osx.txt config1.txt
$ ln -s config2.osx.txt config2.txt

但是这些符号链接将被忽略在 .gitignore 中(当然,它也被跟踪):

# .gitignore
config1.txt
config2.txt

如果这些额外的文件造成混乱,可以将它们放入一个子目录(例如"config"),然后从那里创建符号链接。

也许最好让应用程序自动理解要加载哪些文件,而不是使用符号链接。 - John Zwinck
@johnZwinck:当然可以。但是,除非在非常不寻常的集成开发环境中,这个配置应该保存在某个地方,最好是与项目一起保存,因此你需要一个配置文件,这又回到了我们开始的地方。符号链接具有灵活、稳健和优雅的特点。我喜欢符号链接。 - Jeet
我本意只是在程序中编写逻辑,比如“如果我正在运行Windows,则使用“Windows”配置目录(并可能使用“通用”目录作为备选)。说符号链接很优雅并不能解决它们在不同的计算机上需要以不同方式进行维护的事实,如果在不同类型的计算机之间复制,将会导致错误。 - John Zwinck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接