忽略git commit中的文件但保护它不干净

时间:2017-04-28 12:45:23

标签: git gitignore

在我的工作树中,我有.gitignore中的文件混合:

  1. 构建输出
  2. 不应成为回购的一部分的敏感文件(例如密码,本地服务器的连接详细信息)
  3. 如果我想从头开始重建我的项目,我可以git clean -x删除(1)中的构建输出。但这也删除了(2)中的敏感文件。

    有没有办法标记文件,使其在git clean仍被忽略的情况下不受git commit的影响?

3 个答案:

答案 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标记之前,我能提出的最佳解决方案是使用.gitignoregit clean别名的组合。这有点像黑客攻击,但如果您唯一的选择是将排除选项与git clean一起使用,那么这可能会有所帮助。

  1. 为您正在修改但不想提交的任何文件添加一致且唯一的前缀和/或后缀。例如,将myusername.添加到文件名的开头。
  2. 始终使用git clean -dx --exclude=myusername.*(为此设置别名)。
  3. 编写一个脚本,以递归方式遍历您的文件,并将以myusername.开头的文件复制到没有myusername.的文件。
  4. 现在,每当您运行清理时,具有所需/ true文件名 的文件将被清除,您可以通过运行脚本来恢复它们。另外,将文件名为true的文件作为readonly处理。始终使用kludged文件名编辑文件,然后运行脚本。

    使用skip-worktree标志时,将这些组合起来也可以缓解边缘情况。