我的问题是:我有一个git repo,其中包含.gitignore文件中的目录。通常这可以工作,并且忽略目录中更改的所有文件。但是,如果我将文件签出到不忽略那些文件的分支的忽略目录中,例如:
git checkout a_branch /c/IgnoredDirectory
我发现当我执行
时,现在会跟踪应该忽略的目录和文件git status
那么如何在不通过git跟踪文件的情况下从单独的分支添加文件?我的想法是git应该忽略我添加的文件,因为它们位于.gitignore文件的被忽略的目录中。我在哪里看错了?
代码:
我的.gitignore文件
RecordDataBases/
当我从单独的分支机构签出文件并运行git状态时,我得到:
new file: RecordDataBases/AstroFiles
new file: RecordDataBases/AstroFiles_goodversion
new file: RecordDataBases/AstroFiles_old_file
new file: RecordDataBases/README.rtf
由于
答案 0 :(得分:1)
这是正确的:git checkout commit-specifier -- paths
将指定路径中的指定路径复制到索引(也称为暂存区)。一旦他们进入索引,就会跟踪。然后,它使用相同的完整路径将文件从索引复制到工作树。
由于索引中 的任何文件都按照定义进行跟踪,因此您的任务要么是为了避免首先将它们放入索引中,要么删除它们之后又来了。后者更容易:
git rm -r --cached RecordDataBases/
例如(但请注意,它将删除此类文件的所有索引条目,而不仅仅是git checkout
步骤创建的索引条目)。 --cached
选项告诉git rm
从索引中删除仅文件,而不是从工作树中删除。
您可以,而不是执行上述操作,从而无需先将其复制到索引中,从指定的提交中提取文件。最简单的方法是使用git show
,语法为git show commit-specifier:path > path
,例如git show a_branch:RecordDataBases/AstroFiles > RecordDataBases/AstroFiles
。除了需要重复每个路径名称之外,还有一些注意事项:
但是因为这不会首先将扩展路径复制到索引中,所以之后不需要从索引中删除它们。