我团队中的每个开发人员都有自己的本地配置.该配置信息存储在一个文件中,该文件devtargets.rb在我们的rake构建任务中使用.不过,我不希望开发人员破坏对方的devtargets文件.
我的第一个想法是将该文件放在.gitignore列表中,以便它不会被提交给git.
然后我开始想知道:是否可以提交文件,但忽略对文件的更改?所以,我会提交一个默认版本的文件,然后当开发人员在本地机器上更改它时,git会忽略这些更改,当你执行git status或git commit时它不会显示在已更改文件列表中.
那可能吗?这肯定是一个很好的功能......
Rob*_*son 427
当然,我不时会这样做
git update-index --assume-unchanged [<file> ...]
Run Code Online (Sandbox Code Playgroud)
要撤消并再次开始跟踪(如果您忘记了哪些文件未跟踪,请参阅此问题):
git update-index --no-assume-unchanged [<file> ...]
Run Code Online (Sandbox Code Playgroud)
相关文件:
- [no-]假设未更改
指定此标志时,不会更新为路径记录的对象名称.相反,此选项设置/取消设置路径的"假定未更改"位.当"假设未更改"位打开时,用户承诺不更改文件并允许Git假定工作树文件与索引中记录的文件匹配.如果要更改工作树文件,则需要取消设置该位以告知Git.当在具有非常慢的lstat(2)系统调用的文件系统(例如cifs)上处理大项目时,这有时是有用的.如果需要在索引中修改此文件,例如在提交中合并时,Git将失败(优雅); 因此,如果上游更改了假定未跟踪文件,则需要手动处理该情况.
在这种情况下优雅地失败意味着,如果在执行拉动时该文件的上游有任何更改(合法更改等),它将说:
$ git pull
…
From https://github.com/x/y
72a914a..106a261 master -> origin/master
Updating 72a914a..106a261
error: Your local changes to the following files would be overwritten by merge:
filename.ext
Run Code Online (Sandbox Code Playgroud)
并将拒绝合并.
那时,您可以通过恢复本地更改来克服这个问题,这是一种方式:
$ git checkout filename.ext
Run Code Online (Sandbox Code Playgroud)
然后再次拉动并重新修改你的本地文件,或者可以设置–no-assume-unchanged,你可以在那时进行正常的存储和合并等.
161*_*903 84
执行此操作的首选方法是使用git update-index --skip-worktree <file>,如此答案中所述:
assume-unchanged是为检查一组文件是否已被修改而昂贵的情况而设计的; 当您设置该位时,git(当然)假定在工作副本中尚未修改与该索引部分对应的文件.所以它避免了一堆乱的状态调用.只要索引中的文件条目发生更改(因此,当文件在上游更改时),此位就会丢失.
skip-worktree不止于此:即使git知道文件已被修改(或需要通过重置 - 硬件等修改),它也会假装它没有使用索引中的版本.这将持续到索引被丢弃.
要撤消此操作,请使用 git update-index --no-skip-worktree <file>
erj*_*ang 39
通常的做法似乎是创建devtargets.default.rb并提交它,然后指示每个用户将该文件复制到devtargets.rb(位于.gitignore列表中).例如,CakePHP对其数据库配置文件执行相同操作,该文件自然地在机器之间发生变化.
使用 Git 无法忽略对跟踪文件的更改。Git常见问题解答对此进行了解释:
\n\n\nGit 没有\xe2\x80\x99t 提供执行此操作的方法。原因是,如果 Git 需要覆盖此文件(例如在签出期间),它\xe2\x80\x99 不知道对文件的更改是否宝贵并应保留,或者它们是否不相关并可以安全地销毁。因此,必须采取安全路线并始终保护它们。
\n它\xe2\x80\x99s很容易尝试使用 git update-index 的某些功能,即假设不变和跳过工作树位,但这些不能\xe2\x80\x99不能正常用于此目的,并且应该\xe2\ x80\x99不能这样使用。
\n
如果您的目标是使用配置文件,那么最好的办法是添加示例或模板文件,然后让用户将其复制到位或让脚本创建适当的文件。然后,您应该忽略实际配置文件的位置,只签入示例或模板。
\n| 归档时间: |
|
| 查看次数: |
68720 次 |
| 最近记录: |