我对Git感到厌烦,并遇到以下问题:
我的项目源树:
/
|
+--src/
+----refs/
+----...
|
+--vendor/
+----...
我在我的供应商分支中有代码(目前是MEF),我将在那里编译这些代码,然后将这些引用移到/src/refs中,这是项目获取它们的地方。
我的问题是,我的.gitignore设置为忽略*.dll和*.pdb。我可以执行gitadd-f bar.dll来强制添加被忽略的文件,这是正常的,问题是我无法找出存在哪些文件被忽略。
我想列出被忽略的文件,以确保我不会忘记添加它们。
我已经阅读了gitls文件的手册页,无法使其正常工作。在我看来,gitls文件——排除标准——我应该做我想做的事情。我错过了什么?
(扩展其他答案)
注意,git-check-ignore使用committed.gitignore,而不是工作树中的那个!为了在不影响git历史记录的情况下使用它,您可以自由地尝试编辑它,然后使用gitcommit提交--修改。
这个问题主要发生在您需要解决这个问题的方法时,即git不遵循目录。在.gitignore中输入:
dirtokeep/**
!dirtokeep/.keep
.keep应该是dirtokeep中的零长度文件。
其结果是,除了dirtokeep/.keep之外,dirtokeep中的所有内容都将被忽略,这将导致在clone/checkout时构造dirtokeep目录。
(扩展其他答案)
注意,git-check-ignore使用committed.gitignore,而不是工作树中的那个!为了在不影响git历史记录的情况下使用它,您可以自由地尝试编辑它,然后使用gitcommit提交--修改。
这个问题主要发生在您需要解决这个问题的方法时,即git不遵循目录。在.gitignore中输入:
dirtokeep/**
!dirtokeep/.keep
.keep应该是dirtokeep中的零长度文件。
其结果是,除了dirtokeep/.keep之外,dirtokeep中的所有内容都将被忽略,这将导致在clone/checkout时构造dirtokeep目录。
虽然通常正确,但解决方案并非在所有情况下都有效。假设回购目录如下:
# ls **/*
doc/index.html README.txt tmp/dir0/file0 tmp/file1 tmp/file2
doc:
index.html
tmp:
dir0 file1 file2
tmp/dir0:
file0
和这样的.gitignore:
# cat .gitignore
doc
tmp/*
这将忽略doc目录和tmp下的所有文件。Git按预期工作,但用于列出被忽略文件的给定命令没有。让我们来看看git要说什么:
# git ls-files --others --ignored --exclude-standard
tmp/file1
tmp/file2
请注意,列表中缺少doc。您可以通过以下方式获得:
# git ls-files --others --ignored --exclude-standard --directory
doc/
请注意附加的--directory选项。
据我所知,没有一个命令可以同时列出所有被忽略的文件。但我不知道为什么tmp/dir0根本不出现。