我有一个站点,它有一个/sites/default/files/
目录,用户内容通常保存在该目录中。考虑到我不需要跟踪这些东西,我将/sites/default/files/添加到我的.gitignore文件中。
然后我发现我也想在这个目录中保留一些永久的上传。现在更有意义的做法是跟踪/sites/default/files/中的所有内容并排除不需要的子目录,而不是反过来做。
问题是Git不会停止忽略该目录。我已经从.gitignore中删除了指定此目录的行,它不会跟踪它。我可以选择使用git add /sites/default/files/ -f
来强制git跟踪目录,但我以前做过,看起来很混乱。
如果.gitignore不再指定该目录为忽略,为什么我必须强制Git开始跟踪这些文件?
6条答案
按热度按时间lx0bsm1f1#
你已经知道怎么做了。
git add -f
就是这样。如果你问为什么...这是因为git在内部设置了
assume-unchanged
位。这一点会让git认为文件没有被修改,所以git add
不会添加它。如果你想弄清楚实现细节,你可以使用
git update-index --no-assume-unchanged <file>
命令。nnsrf1az2#
我不认为J-16是正确的。http://www.kernel.org/pub/software/scm/git/docs/git-add.html:
默认情况下,git add命令不会添加忽略的文件。如果在命令行中显式指定了任何被忽略的文件,git add将失败,并显示一个被忽略的文件列表。通过Git执行的目录递归或文件名globbing(在shell之前引用你的globs)所忽略的文件将被默默忽略。git add命令可以使用-f(force)选项添加忽略的文件。
git add -f
似乎只用于添加一个文件,该文件确实存在于某个忽略文件中。也许在/sites或/sites/default中有另一个.gitignore文件,它也告诉Git忽略这个目录,或者它已经在.git/info/exclude中设置了?
rjjhvcjd3#
为子孙后代:我的问题的答案是“只要仔细看看”。
@twalberg正确地指出,在.gitignore文件中可能有一条我忽略的规则。应用.gitignore规则的级联方式使排除文件的范围超出预期范围变得容易。
据我所知,我对git工作原理的假设是正确的。同样,我的案例似乎并不支持(或反驳)@J-16 SDiZ关于
assume-unchanged
位可能扮演什么角色的评论。sshcrbum4#
我们在Drupal站点目录中遇到了非常类似的问题。问题是 Drupal发行版 * 在更高级别的drupal目录中有一个.gitignore文件,该文件与drupal/sites/files/ 中的任何文件相匹配
8yparm6h5#
如果你通过git staging错误地点击了Eclipse git中忽略的选项,那么要取回你的文件,请执行以下操作:
1.打开git bash
git status --ignored
在此处执行此命令,将显示忽略的文件1.复制该文件的路径
git add -f <file path>
[在-f后添加文件路径]git status
1.文件将可见
mwg9r5ms6#
在我的例子中,
.png
和.xlsx
文件在存储库中被忽略。正如@doub1ejack、@J-16 SDiZ和其他人所说的那样,您需要使用git add -f
来跟踪更改。但是,git add -f
无法工作,除非您显式指定文件或模式并响应为Nothing specified, nothing added.
Maybe you wanted to say 'git add .'?
要开始跟踪以前忽略的文件或模式:
1.首先,您需要通过键入
cd <path>
将工作目录更改为存储库。1.其次,您需要指定文件或模式来跟踪它们,方法是为特定文件键入
git add -f <file name>.extension
,或为所有excel文件键入git add -f *.xlsx
。这不忽略了我的情况下被忽略的文件。您也可以检查此YouTube video。