忽略 git commit 中的文件,但保护其不被清理

问题描述 投票:0回答:3

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

  1. 构建输出
  2. 不应成为存储库一部分的敏感文件(例如密码、本地服务器的连接详细信息)

如果我想从头开始重建我的项目,我可以执行

git clean -x
删除 (1) 中的构建输出。但这也删除了 (2) 中的敏感文件。

有没有办法标记文件,使其不受

git clean
的影响,同时仍被
git commit
忽略?

git gitignore
3个回答
9
投票

git-clean
的文档说:

-x

不要使用从 .gitignore(每个目录)和 $GIT_DIR/info/exclude 读取的标准忽略规则,但仍然使用 -e 选项给出的忽略规则。

和:

-e <pattern>
--exclude=<pattern>

除了标准忽略规则之外,还使用给定的排除模式(请参阅 gitignore(5))。

因此,如果您想保留,请说,

keys.pem
,您可以打电话

git clean -fdxe keys.pem

您还可以为命令创建别名


0
投票

交互模式下使用 git clean:

选择按模式过滤子命令:

这会显示要删除的文件和目录并发出 “输入忽略模式>>”提示。 可以输入空格分隔 排除文件和目录删除的模式。 例如“*。C *.h”将从删除中排除以“.c”和“.h”结尾的文件。当您对过滤结果感到满意时,按 ENTER(空)返回 到主菜单。


0
投票

看一下 @Borealid 的这个答案到问题 Git - ‘assume-unchanged’ 和 ‘skip-worktree’ 之间的区别

看起来使用

skip-worktree

 标志是解决我的问题的好方法。我通过寻找我的问题的答案来解决你的问题,我认为它们本质上是同一个问题。但是,使用 
skip-worktree
 标志,
在执行某些操作时仍然需要注意,并且文件已在本地或远程发生更改

在了解

skip-worktree

 标志之前,我能想到的最佳解决方案是使用 
.gitignore
 加上 
git clean
 的别名的组合。这有点麻烦,但如果您唯一的选择是使用 
git clean
 的排除选项,那么这可能会有所帮助。

    向您正在修改且不想提交的任何文件添加一致且唯一的前缀和/或后缀。例如,将
  1. myusername.
     添加到文件名的开头。
  2. 始终使用
  3. git clean -dx --exclude=myusername.*
    (为此创建别名)。
  4. 编写一个脚本,递归地遍历文件并将以
  5. myusername.
     开头的文件复制到不带 
    myusername.
     的文件。
现在,每当您运行清理时,具有所需/真实文件名的文件

都会被清理,但是您可以通过运行脚本来恢复它们。另外,将具有真实文件名的文件视为只读。始终使用混乱的文件名编辑文件,然后运行脚本。 将这些组合起来也可能有助于缓解使用

skip-worktree

标志时的边缘情况。

    

© www.soinside.com 2019 - 2024. All rights reserved.