Git仓库忽略所有.dll文件

91

标题已经说得很清楚了。我试图将我的NuGet包添加到存储库中,但是除了.dll文件外,其他所有内容都被检测到。

gitignore文件不包含任何*.dll的引用。无论.dll文件位于存储库的任何位置,它们都无法被识别。info/exclude也为空。

我还尝试了对存储库进行克隆(从文件系统到文件系统,而不是从远程到文件系统),但没有成功解决这个问题。这个问题在两台不同的计算机上也发生了。

我可以手动添加.dll文件,但它们应该被跟踪。为什么它们没有被跟踪?


27
git config --get core.excludesfile 会返回什么? - Antony Hatchkins
2
通常不建议使用git来跟踪二进制文件,因为git无法有效地计算版本之间的差异,因此如果保留所有版本,则会浪费空间。如果dll是动态生成的,则最好在git中忽略它们。如果不是,则最好使用另一种同步机制(例如rsync)。 - Antony Hatchkins
这些是我正在尝试添加到Git的NuGet包。我没有使用NuGet的“Package Restore”功能,因此需要将整个packages文件夹检入。 - Paul Knopf
8个回答

124

6
考虑到他正在处理dll文件,他应该是在Windows平台上操作,因此“~”代表Windows 7下的“$HOMEDRIVE $HOMEPATH”。 - Antony Hatchkins
10
这似乎是问题所在。虽然我没有添加这个全局忽略文件。有什么原因它会突然出现吗?现在想起来,我最近安装了Atlassian的SourceTree。也许它是罪魁祸首? - Paul Knopf
6
我有同样的问题,之前也安装了SourceTree。所以我猜测SourceTree在过去曾经起作用,因此很可能是它添加了全局忽略文件。 - Andreas Krebs
8
编辑:好的,这是由SourceTree添加的[链接](https://twitter.com/daniellangnet/status/314634981110591488) - Andreas Krebs
31
我需要运行git check-ignore命令来查找文件所在位置。在~/Documents/gitignore_global.txt中找到了它。 - Matt Canty
显示剩余8条评论

104

如果您使用SourceTree和默认设置,它将默认忽略所有的DLL...
工具=>选项=>Git然后"编辑文件"...在.dll=>"#.dll"前添加"#"...保存并关闭。

然后,在Windows资源管理器中打开“packages”文件夹,在GitBash终端中键入“git add .”,让其工作,回到SourceTree等待一秒钟,所有这些缺失的包DLL将显示出来供您提交和推送。


14
适用于SourceTree用户的正确答案 ;) - jmpcm
你知道有一个全局忽略列表吗?我在GUI中找不到它...谢谢! - Christoph
工具 => 选项 => Git/Mercurial 全局忽略列表... 如果您没有,请在那里创建并指向它。 - KevinB
2
文件位置:~/Documents/gitignore_global.txt - James McCormack
这对于 Source Tree 是有效的,但是对于 Visual Studio,忽略文件不在我的 gitignore 中。所以我使用了 Source Tree 来完成这个任务。 - Demodave
显示剩余2条评论

11
我可以手动添加 .dll 文件,但它们不应该被跟踪。为什么它们没有被跟踪?
不,除非您已经添加了它们,否则它们不应该被跟踪。只有已经添加并提交的文件才会被跟踪;这就是“跟踪”的含义。
尝试通过git add手动添加其中一个文件,它会告诉您为什么正在忽略它们,并提示您使用 git add -f 命令来强制添加该文件。

我执行了 "git add '/packages'",但它没有检测到 .dll 文件。然后我使用了 -f 选项,成功添加了它们。不过我找到了问题所在,是因为 "*.dll" 被加入了全局忽略列表中。但我不知道这个全局忽略列表是从哪里来的。 - Paul Knopf

2

您需要明确告诉git跟踪任何新文件。

  1. 运行git add 文件名将文件添加到git的索引中。

  2. 运行git commit提交您索引中的更改。

git status还应显示未跟踪的文件和目录列表。

如果您想列出gitignore忽略的存储库中的所有文件,可以运行:

git ls-files . --ignored --exclude-standard --others

如果您想列出仓库中所有未跟踪的文件:

git ls-files . --exclude-standard --others

2
我不得不使用“git add -f”来跟踪实际上被忽略的文件。原来是全局忽略文件中的一个条目,某个应用程序在我不知情的情况下将其放置在那里。 - Paul Knopf

2

我遇到了类似的问题。我无法将包目录中的.dll文件添加到git中,然后我发现sourcetree自动将gitignore_global.txt文件添加为全局git忽略设置。我从gitignore_global.txt文件中删除了*.dll,这对我来说运作良好。

gitignore_global.txt文件的位置如下:

C:\Users\XXXX\Documents\gitignore_global.txt 或者您可以在sourcetree的TOOL => OPTION => GIT选项卡中找到全局忽略列表


1
你需要在项目根目录下拥有一个全局的 .gitignore 文件,或者在子目录中拥有更多的 .gitignore 文件。在 Linux 系统和 MacOS 中,全局的 git-ignore 文件很可能在你的 Home 目录下 ~/

~/.gitignore_global

在Windows上,它很可能在您的用户目录中。可以通过在命令行中键入ECHO %USERPROFILE%whoami来找到本地用户。
如果不在那里,那么肯定有一个.gitconfig。在其中查找gitignore的位置(例如,用户的Documents文件夹)。 编辑:使用git config --list --show-origin获取有关贡献git设置及其对应文件位置的详细信息。

1
在我的情况下,.gitignore 文件中没有 .dll 引用,并且我也没有全局文件。但是,在 .git 子目录中,我发现了一个名为 ms-persist.xml 的文件。我关闭了所有 Visual Studio 的实例,然后手动将缺失的 .dll 添加到该文件中。当我重新打开 Visual Studio 时,这些 .dll 就显示为需要检入。我将它们检入,现在一切正常...

1

我知道这个问题很老了,但我为那些将来可能访问这个问题的人添加了一些内容。你可以像上面的答案所提到的那样修改你的全局忽略文件,但那会影响到你所有的git仓库。相反,如果你想要更细粒度的方法,你可以在你的单个项目.gitignores中排除特定的DLL或特定的文件夹。这将覆盖所有的忽略设置,并强制git检测和处理这些文件。我认为这是一个更好的方法。

.gitignore(针对你特定的项目)

# Custom ignores
!*.dll
# or
!My.specific.dll

# rest of .gitignore

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接