我正在git存储库上工作。 我有一个工作副本,文件列表很大。
我的.gitignore
看起来像
roo/output* # ignore set of folders
*.pyc # ignore a filetype
root/a_folder # ignore a folder
root/filemame*.txt # ignore a set of files
root/**/.bin # ignore an extension within a folder
现在,我想创建一个新的工作副本。为了使其正常工作,我还需要原始wc中被忽略的文件。
我在这里尝试了一些答案:
Git command to show which specific files are ignored by .gitignore
git check-ignore * # return only folders for me
git status --ignored # takes forever to run
git ls-files --others -i --exclude-standard # returns empty for me
我需要使用原始路径名获得此列表,以便创建一个保持文件夹结构的zip文件,以便可以在新的工作副本中无缝地将其解压缩。
答案 0 :(得分:1)
好吧,我们可以研究如何使git check-ignore
更好地工作,但这似乎有点过度设计。如果只需要执行一次,则只需找出要包含在忽略文件中的模式中的内容即可。 (我将忽略此目录,因此将压缩此目录。等等。)如果您需要常规执行此操作,则可能需要重新考虑如何使用忽略规则。
无论如何,check-ignore
命令可能会输出文件和/或目录,但有两个警告:
首先,您需要告诉它是否要搜索子目录。如果您只说git check-ignore *
,那么它将仅搜索当前目录。相反,您可能想要
git check-ignore * **/*
但是即使如此,当您排除目录a/
并且该目录包含另一个目录a/b/
时,仍然会出现第二个问题。有一个坏消息和一个坏消息。
坏消息是,即使使用a/b/
模式,它也不会在**/*
内部进行搜索;一旦看到a/b/
被排除,它就会列出并继续。
更糟糕的消息是,如果a/b/
中存在任何未排除的路径(例如,因为它们是在忽略该路径之前添加的,或者因为它们是与-f
一起添加的),则{{1 }}未列出,并且它 still 不在a/b/
下进行搜索,以查找是否确实排除了更具体的路径。在我看来,这就像一个虫子。作为部分解决方法,您可以说
a/b/
,它将列出目录,但仍不会在目录内搜索-这意味着您有一些隐式误报(因为该目录中的某些内容是 个不被忽略的文件)。
所以...如果您要么(a)知道索引在路径中不包含文件条目,否则该文件会被忽略,或者(b)可以通过使用{{ 1}},那么您可以使用`check-ignore输出。如果您看到目录,则只需将整个目录(及其内容,以递归方式)包含在ZIP中。
如果这将复制一个未被真正忽略的文件,我想这样做
git check-ignore --no-index **/* *
提取您的ZIP后应该可以解决该问题。 (提取ZIP后,您始终可以使用--no-index
来验证是否有任何要撤消的不可忽略的更改。)
答案 1 :(得分:1)
这是对我有用的东西。首先,要进行检查,我列出了所有被忽略的文件,没有被忽略目录的内容(所以只是目录本身):
<Route path="/heroes" component={Heroes} />
然后,我通过此列表以单线压缩,以将所有内容保存到忽略文件.zip:
$ git ls-files -o -i --directory --exclude-standard
TODO
some/ignored/dir/
答案 2 :(得分:0)
另一种(有些被忽略)的方法是在空转模式下使用git clean
:
git clean -dxn
遍历所有子目录,吐出每个不在git上的文件的名称,无论是新文件还是被忽略的文件(-x
标志确保输出中包括被忽略的文件)。
为了清除在Would remove
输出的每一行上显示的前缀git-clean
并将其发送到zip,请输入:
git clean -dxn | sed 's/^Would remove \(.*\)/\1/g' | zip -@ backup-file.zip