当将一个受源代码控制的项目下载到一个新的开发人员或一台新的机器上时,它应该开箱即用。
但是在任何软件项目中,都有一些配置文件由于各种原因需要进行本地更改,比如数据库连接等等。
我希望这些文件的副本下的源代码控制,使项目完成一个新的安装。
我 * 不 * 希望这些本地更改上传,我不希望这些更改下载到并破坏现有的安装。
您可以告诉它忽略这些文件,但它希望全局忽略这些文件,而不仅仅是本地忽略。
到目前为止,我最好的解决方案是创建一个副本(config.sample),并将其保留在源代码控制中,同时忽略活动副本。
似乎应该有更好的解决办法。
2条答案
按热度按时间kq4fsx7k1#
From Feb 2020, by Michael
用户想要忽略Git跟踪的文件更改是很常见的。
是的。
这种情况的常见场景是IDE设置和配置文件,它们通常不应被跟踪,并且可能使用模板机制从被跟踪的文件生成。
是的。
但是,用户了解了assume-unchanged和skip-worktree位,并尝试使用它们来完成此操作。
那是我的下一步。
这是有问题的,因为当这些位被设置时,许多操作的行为与用户期望的一样,但是当
git checkout
需要替换文件时,它们通常没有帮助。在这种情况下,没有合理的行为,因为有时数据是宝贵的,例如某些配置文件,有时它是用户乐于丢弃的不相关数据。
由于这不是一个受支持的配置,用户很容易将现有功能误用于非预期目的,从而导致普遍的悲伤和困惑,让我们在
git update-index
文档中记录现有行为和陷阱,以便用户知道他们应该探索替代解决方案。此外,让我们提供一个推荐的解决方案来处理配置文件的常见情况,因为有一些众所周知的方法在许多环境中得到了成功的使用。
git update-index
手册页现在包括:用户经常尝试使用
assume-unchanged
和skip-worktree
位来告诉Git忽略对被跟踪文件的更改。这并不像预期的那样工作,因为Git在执行某些操作时仍然会根据索引检查工作树文件。一般来说,Git不提供忽略对被跟踪文件的更改的方法,因此推荐替代解决方案。例如,如果要更改的文件是某种配置文件,则存储库可以包含一个示例配置文件,然后可以将其复制到忽略的名称中并进行修改。
我们还停留在起点,但至少我们可以停止寻找解决方案。
j8ag8udp2#
到目前为止,我最好的解决方案是创建一个副本(
config.sample
),并将其保留在源代码控制中,同时忽略活动副本。这就是我通常做的,但我添加了一个
build
script,它:build
脚本调用的senv
script,负责设置正确的环境变量config.sample
复制到config
文件(被Git忽略),并使用合理的默认值这样,我就不必记住在克隆之后我应该做什么:构建脚本将告诉我是否缺少任何内容或需要编辑/配置。