如果.gitignore忽略了它自己会发生什么?这会影响到“git fetch”吗?

3
假设这种情况:
  1. 一个存放源代码和一些elf二进制文件的git服务器
  2. 该服务器没有.gitignore文件。
  3. 我不知道会有什么新的二进制文件添加到git服务器中
  4. 每次构建代码都会创建一些新的elf二进制文件。
  5. 由于没有.gitignore文件,构建后,我无法使用git fetch或git pull,因为git会提示“未提交的更改”
所以我想解决这个问题,但我不能只用*.elf来创建一个.gitignore文件,因为其中一些elf文件是与git服务器一起发布的。
当然,我也不能告诉.gitignore不要忽略那些与git服务器一起发布的elf文件,因为未来可能会有一些新的elf二进制文件被添加到git服务器中。
那么,如果我创建一个忽略自己的.gitignore文件,这样它就不会被推送到git服务器了,但是这会影响我的git fetch过程吗?如果服务器上和本地计算机上有两个不同的.gitignore规则,那么git fetch将遵循哪一个?
我该如何解决我的问题?

那么,如果我创建一个忽略自身的.gitignore文件,这样它就不会被推送到git服务器了。但是.gitignore与推送无关,也与获取无关。 - zerkms
你的意思是什么?这是否意味着所有的事情和更改都将被推送或获取,即使gitignore选择忽略它们? - demonguy
不是的。.gitignore 只影响要被暂存和提交的内容。当你执行推送/拉取操作时,它并不关心内容。就像它根本不关心它一样。它关心的只是一个图形。 - zerkms
如果我有一个忽略所有*.elf文件的gitignore,然后其他人在git服务器上添加了新的elf文件,那么我执行git fetch,这些新文件会被下载到我的电脑上吗? - demonguy
1
再次强调:git fetch 操作会完整地获取提交记录。无条件、完全地获取已经提交的内容。 - zerkms
哦,谢谢。你的解释很清楚! - demonguy
1个回答

3
首先,停止在您的存储库中存储二进制文件。Git旨在跟踪源代码更改,而不是二进制文件的更改。
其次,实际上有三个位置会读取要忽略的文件以进行跟踪:.gitignore(本地项目)、.git/info/exclude(本地项目,不公开)和全局排除文件,适用于所有Git项目。您个人的.git文件夹中的任何内容都不会向上游共享,因此您可以随意向该文件添加任何排除项,以便它们不会在其他任何地方传播。
看起来您不想创建.gitignore文件,因为您想避免删除ELF文件的风险,但欢迎将该排除项添加到您的本地.git/info/exclude文件中。

这实际上并没有回答我的问题。首先,二进制发布非常普遍,例如没有源代码但其他源代码需要的库。其次,这仍然无法解决“如果git服务器添加了一些新的elf文件”的问题。 - demonguy
2
首先,二进制发布非常常见,比如没有源代码但是其他源代码需要的库。而对于构件,你使用构件库,而不是源代码控制系统。 - zerkms

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