在我的工作树中,我有一些被.gitignore忽略的文件:
- 构建输出(Build outputs)
- 不应该成为仓库一部分的敏感文件(例如密码、本地服务器连接详细信息等)
如果我想要从头开始重建项目,我可以使用 git clean -x
来删除(1)中的构建输出。但是这也会删除(2)中的敏感文件。
是否有一种方法可以标记一个文件,使其不受git clean
影响,同时仍然被git commit
忽略?
在我的工作树中,我有一些被.gitignore忽略的文件:
如果我想要从头开始重建项目,我可以使用 git clean -x
来删除(1)中的构建输出。但是这也会删除(2)中的敏感文件。
是否有一种方法可以标记一个文件,使其不受git clean
影响,同时仍然被git commit
忽略?
看一下这个问题答案,来自@Borealid,关于Git - Difference Between 'assume-unchanged' and 'skip-worktree'。
使用skip-worktree
标志似乎是解决我的问题的好方法。我通过寻找答案来到你的问题,我认为它们本质上是相同的问题。然而,使用skip-worktree
标志时,在执行某些操作并且文件已经在本地或远程更改时,仍需要注意。
在了解skip-worktree
标志之前,我能想到的最好的解决方案是使用.gitignore
加上git clean
的别名。这有点像黑客行为,但如果您唯一的选择是使用git clean
的排除选项,那么这可能会有所帮助。
myusername.
。git clean -dx --exclude=myusername.*
(为此创建一个别名)。myusername.
开头的文件复制到没有 myusername.
的文件中的脚本。现在,每当您运行清理时,具有所需/真实文件名的文件将被清除,但是您可以通过运行脚本来恢复它们。此外,请将真实文件名的文件视为只读。始终编辑带有 kludged 文件名的文件,然后运行脚本。
结合使用 skip-worktree
标志时,这些组合也可能有助于减轻边缘情况。