在我的工作树中,我有.gitignore中的文件混合:
如果我想从头开始重建我的项目,我可以git clean -x
删除(1)中的构建输出。但这也删除了(2)中的敏感文件。
有没有办法标记文件,使其在git clean
仍被忽略的情况下不受git commit
的影响?
答案 0 :(得分:3)
git-clean
的文档说-x
:
<强> -x 强>
不要使用从.gitignore(每个目录)和$ GIT_DIR / info / exclude读取的标准忽略规则,但仍然使用-e选项给出的忽略规则。
因此,如果您想保留keys.pem
,请致电
git clean -fdxe keys.pem
您还可以为命令创建alias。
答案 1 :(得分:0)
在 Interactive mode :
中使用git clean
选择filter by pattern子命令:
显示要删除的文件和目录并发出 “输入忽略模式&gt;&gt;”提示。 您可以输入以空格分隔的内容 从删除中排除文件和目录的模式。例如“*。C * .h“将从删除中排除以”.c“和”.h“结尾的文件。如果对筛选结果感到满意,请按ENTER(空)返回 到主菜单。
答案 2 :(得分:0)
从look at this answer @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.
的文件。现在,每当您运行清理时,具有所需/ true文件名 的文件将被清除,但您可以通过运行脚本来恢复它们。另外,将文件名为true的文件作为readonly处理。始终使用kludged文件名编辑文件,然后运行脚本。
使用skip-worktree
标志时,将这些组合起来也可以缓解边缘情况。