2017-06-10 73 views
1

我的问题是这样的:我有一个git repo与.gitignore文件中的目录。通常这是有效的,并且在目录中更改的任何文件都将被忽略。但是,如果我从一个分支,不签文件到忽略目录忽略这些文件,即:从一个分支Git结帐文件没有跟踪他们

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

这是正确的:git checkout commit-specifier -- paths从指定的提交中复制指定的路径,进入索引(也称为暂存区域)。一旦他们在索引中,他们跟踪。然后它将文件从索引复制到工作树,使用从任何目录或glob扩展产生的相同完整路径。

自认为索引任何文件跟踪顾名思义,你的任务是既避免让他们进入指数摆在首位,或者后来又删除它们。后者是更容易:

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。除了需要重复每个路径名,还有这里有一些注意事项:

  • 这需要做一个文件在同一时间(有没有简单的方法来获得整个目录树,包括子树);和
  • 默认情况下,任何行尾,标识或涂抹过滤器操作均被省略。

但是,因为这不会将扩展路径首先复制到索引中,所以不需要将它们从索引中删除。

+0

谢谢,这就是我一直在寻找的答案。 –

相关问题