如何让 .gitignore 不出现在未跟踪文件列表中?
如何阻止.gitignore文件出现在未跟踪文件列表中?
问题的原因:可能是因为.gitignore文件本身已经被跟踪,导致它出现在未跟踪文件列表中。
解决方法:可以尝试以下几种方法来解决这个问题:
1. 将.gitignore文件添加到.gitignore文件中:在.gitignore文件中添加一行“.gitignore”,这将使.gitignore文件被git忽略。不过这不是一个好主意,我认为.gitignore文件应该被版本控制和跟踪。
2. 使用excludes文件:在一些特定的情况下,使用excludes文件可能会更好。比如,如果你使用git-svn存储库,并且不希望git-ish文件传到svn中,那么这种方法可能是可行的。
3. 取消跟踪.gitignore文件:如果你的.gitignore文件已经被跟踪,你可以尝试运行“git rm --cached .gitignore”命令来取消跟踪它。
4. 只忽略仓库中的更改:如果你只想忽略仓库中的更改,而不是.gitignore文件本身,那么这个解决方法可能适合你。你可以在子文件夹中进行实际的提交,而不在.gitignore文件所在的文件夹中进行提交。
这些方法中的任何一种都可以帮助你解决.gitignore文件出现在未跟踪文件列表中的问题。根据你的具体情况选择相应的方法即可。
问题的原因:.gitignore文件出现在未跟踪文件列表中的原因是因为该文件被git追踪到了版本库中。
解决方法:可以使用以下方法来解决该问题:
1. 将被忽略的文件列表存储在.git/info/exclude文件中,这样的设置只适用于当前的仓库副本。
2. 将这些特定于编辑器或平台的文件放在~/.gitignore文件中,这样可以在任何仓库中都被忽略掉。
3. 如果一个文件已经被追踪,可以使用"git update-index --assume-unchanged
4. 对于这种情况,最好使用每个用户的.gitignore文件。
这些解决方法对于使用git svn的情况尤其有帮助,因为团队中的其他贡献者可能不希望在svn仓库中看到与git相关的任何内容。
需要注意的是,.git目录位于仓库的根目录,而不一定是工作目录。
如何阻止.gitignore出现在未跟踪文件列表中?
问题的原因:
.gitignore文件应该是存储库的一部分,因此应该添加并提交,如git status建议的那样。它必须是存储库树的一部分,以便可以合并对其的更改等。
解决方法:
将.gitignore文件添加到存储库中,不应该被忽略。
如果确实需要这样做,可以将.gitignore文件添加到.gitignore文件中,如果不想将其提交。但是,在这种情况下,最好将忽略的内容添加到.git/info/exclude文件中,这是一个特殊的本地文件,与.gitignore文件的功能完全相同,但不会在"git status"中显示,因为它位于.git文件夹中。
解决方法:
请参阅https://help.github.com/articles/ignoring-files
这不应该是存储库的元数据,而不是被跟踪的文件吗?
存储库元数据是特定于存储库的。例如,如果在存储库中添加了提交钩子,并且有人克隆了存储库,他们将不会获得提交钩子。
如果你正在团队中工作,每个人都应该忽略相同的文件集,这就是为什么.gitignore文件被添加到存储库中的原因。没有人说你必须将其部署为项目的一部分。
.gitignore文件不一定是存储库中的文件。你可以在许多不同的位置设置忽略设置。GitHub有一篇很好的文章,可以了解更多信息。你可以在任何地方设置全局忽略设置,并且可以在存储库的.git元数据中设置特定于存储库的设置。
如果有一半团队忽略另一半正在实际处理的文件(并且项目依赖于此),这样做是否危险?
全局忽略文件对于特定于该特定环境的文件非常有用。例如,.DS_Store文件只适用于OS X上的Finder.app,并且不应该出现在项目的.gitignore文件中。同样适用于eclipse和intellij文件,除非所有参与项目的人使用特定的IDE。
在使用这些忽略文件时,当然需要判断要放入其中的内容,但它们仍然有一些很好的用途。例如,我使用Vim,所以在我的全局.gitignore文件中,我将*.swp文件标记为被忽略。这样,我就不必将其添加到我的每个项目中,而不使用vim的人就不必担心它。
对于使用git-svn的情况,我没有.gitignore文件。我使用.git/info/excludes,这是一个不会出现在"git status"中的存储库本地文件,但其功能与gitignore相同。
因此,如果您使用.git/info/exclude而不是.gitignore,则克隆您存储库的其他人将不会忽略相同的文件。
确实如此。对于只想让其漂浮在周围的文件而没有更好的文件夹的情况,它非常有用,我有时在.git/info/excludes中忽略一个"etc"文件夹,我在其中放置各种文档、下载等,这些都不想提交检查。对于git-svn,它也很有效,除非您想将.gitignore文件提交到svn存储库中。
如果您希望被忽略的文件仅适用于您的存储库,而不适用于合作者的存储库,则可以使用.git/info/exclude。
值得一提的是,将.gitignore添加到.gitignore文件中实际上不会导致其被忽略,它仍然会显示在git status中。
我在一个团队中工作,虽然我们确实想忽略相同的核心模式,但我被要求为例如模式*.swp使用全局.gitignore。这是由Vim创建的,只有我团队中的一部分人(包括我)在使用它来编写代码。
我发现将与项目相关的内容放在.gitignore文件中,将与开发/环境/机器相关的文件放在.git/info/exclude文件中是最佳实践。这样,我们不会用那些可能只与一个人有关的东西来膨胀gitignore列表,因为他/她选择了特定的开发设置。具体的例子是.DS_Store文件,只与我有关,因为我使用的是macOS。
将.gitignore添加到.gitignore文件中只是需要的简短答案。
总结一下,.gitignore用于忽略所有用户的文件,而.git/info/exclude用于仅忽略当前用户的文件。