Github 版本的 Perforce 显式签出功能

Github version of Perforce's explicit check-out feature

我最近从 Perforce 转移到 Github(VS2017 的内置支持)用于一些单独的项目。 Perforce 中有一个名为 "make writable" 的功能,它允许您在本地写入文件,然后仅通过显式检出然后提交来将其提交给服务器。

这被广泛用于任何只需要很少推送但仍需要写入的二进制文件(.exe 等)。

不幸的是,根据我对 Github 的有限经验,似乎所有文件都设置为可写并且始终标记为 "changed",甚至是 exe。是否有我可以进行或设置的设置,允许 Github 仅将文件标记为明确更改,这样我就不会意外推送不完整、损坏或调试的 .exe?

更新的答案:所以,我忘记了,如果文件在任何时候被 Git 跟踪,那么它就会变得有点丑陋。有很多方法可以解决这个问题,但这不是一个单一的命令。

如果你想做 .gitignore 路线,你可以。但是还有一个额外的步骤(第一步见下文)。在每次提交 .exe 文件后,您必须 运行 git rm --cached <filename>。这将删除文件周围的元数据,告诉 Git 跟踪它。一旦你这样做了,它就不会再出现在 Visual Studio 插件的 Changes 列表中(如果你在命令行上,它就不会出现在 git status 中)。然后添加一个文件,你做我下面提到的,就是做 git add -f <filename>.

相反,另一种方法是 运行 git update-index --assume-unchanged <filename>。这告诉 Git 忽略对文件的更改。当你想提交它时,首先 运行 git update-index --no-assume-unchange <filename> 并执行正常的 git add git commit 工作流程,然后一旦你提交它, 运行 再次 git update-index --assume-unchanged <filename>位。这很混乱,老实说,我会在 VS 中编写一个自定义工具来执行此操作,而不是依赖 Visual Studio.

中的内置 SCM 工具

原始答案:最好的方法(IMO,其他人会有自己的意见)是将文件添加到您的 .gitignore。然后 if/when 你真的想提交它们,做一个 git add -f <file> 然后正常提交。

编辑:请注意,这是每个人都必须做的事情,以避免意外犯错。解决这个问题的方法是也提交你的 .gitignore 这样每个人都有相同的行为。