我的团队最近从ClearCase迁移到Git。一些团队成员习惯于劫持文件,在ClearCase中这意味着对已跟踪的文件进行私有更改,这些更改您不打算与任何人分享。
在执行类似于Git add/commit的操作时,ClearCase基本上会忽略这些文件,并且在执行类似于Git pull的操作时不会覆盖它们。
在Git中是否有相应的操作?
请注意,我并不是说这是一个好的工作流程,即使在ClearCase世界中也是如此。 “为什么要这样做”的答案是因为他们习惯这样做。
git update-index --assume-unchanged -- afile.
该文件仍然有版本控制,但您对其进行的任何修改都不会显示在git status
中,并且不会被提交(显然也不会被推送)。
您可以随时进行更改,然后不提交它们。当您拉取/合并/提交/检出时,这些更改将“浮动”;如果您尝试执行会覆盖它们的操作(例如,合并触及相同文件的更改),它将拒绝 - 此时您可以使用git stash
来隐藏您的更改,执行操作,然后使用git stash (apply|pop)
来恢复您的更改。
如果您想在本地实际上将这些更改提交但不与任何其他人共享,我认为最好的方法是将它们保留在本地分支上,并将其rebase到(或与之合并)“实际开发”所在的分支上,并小心不要实际推送包含本地更改的提交。
git update-index --skip-worktree -- aFile
- VonC--assume-unchanged
对add -u
和commit -a
有所作用,但是它们中的任何一个或--skip-worktree
是否允许跳过标记文件以使拉取成功,从而避免推送被拒绝? - gatkin