【发布时间】:2014-05-19 08:49:08
【问题描述】:
我对使用.git/info/exclude 和.gitignore 排除文件的利弊有点困惑。
它们都在存储库/项目级别,那么它们有什么不同以及我们应该何时使用.git/info/exclude?
【问题讨论】:
我对使用.git/info/exclude 和.gitignore 排除文件的利弊有点困惑。
它们都在存储库/项目级别,那么它们有什么不同以及我们应该何时使用.git/info/exclude?
【问题讨论】:
谷歌搜索:3 ways of excluding files
.gitignore 适用于此存储库的每个克隆(版本化,每个人都会拥有它),.git/info/exclude 仅适用于此存储库的本地副本(本地,不与他人共享),~/.gitignore 适用于您计算机上的所有存储库(本地,不与他人共享)。3.实际上需要在你的电脑上设置一个配置:
git config --global core.excludesfile '~/.gitignore'
【讨论】:
.git/info/excludes,而它应该是.git/info/exclude,正如它链接到的文档所证实的那样。
git update-index --assume-unchanged ...。它适用于已经在 repo 中的文件。
使用.gitignore 忽略特定于项目 的规则。使用exclude 或全局忽略文件来获取特定于您的环境 的忽略规则。
例如,我的全局忽略文件会忽略我正在使用的任何编辑器生成的临时文件 - 该规则特定于我的环境,并且对于同一项目中的其他一些开发人员可能会有所不同(也许他们使用不同的编辑器)。 OTOH,我的项目.gitignore 文件忽略了诸如 API 密钥和构建工件之类的东西——这些是 项目 的,应该对项目中的每个人都一样。
这有帮助吗?
【讨论】:
只是为了提供我们的(现实世界)体验:当我们不得不在每个开发环境中自定义一些配置文件但仍希望源代码在 repo 中维护并可供其他开发人员使用时,我们开始使用 .git/info/exclude .
这样,本地文件一旦被克隆和修改就可以从提交中排除,而不会影响 repo 中的原始文件,但也不必在 repo 中被忽略。
【讨论】:
.gitignore 的优势在于它可以检入到存储库本身,这与.git/info/exclude 不同。另一个优点是您可以拥有多个 .gitignore 文件,每个目录/子目录中都有一个用于目录特定忽略规则的文件,这与 .git/info/exclude 不同。
因此,.gitignore 可用于存储库的所有克隆。因此,在大型团队中,所有人都会忽略相同类型的文件,例如 *.db、*.log。
由于有多个.gitignore,您可以有更具体的忽略规则。
.git/info/exclude 仅可用于单个克隆,因此一个人在其克隆中忽略的内容在其他人的克隆中不可用。例如,如果有人使用Eclipse 进行开发,那么该开发人员将.build 文件夹添加到.git/info/exclude 可能是有意义的,因为其他开发人员可能没有使用Eclipse。
一般来说,必须被普遍忽略的文件/忽略规则应放入.gitignore,否则您只想在本地克隆上忽略的文件应放入.git/info/exclude
【讨论】:
~/.gitignore 的具体条目。我的理解是忽略规则可以分为 3 个级别 - $PROJECT/.git/info/exclude 用于(项目,用户)特定的忽略规则,$PROJECT/<any number of directories>/.gitignore 用于任何地方的任何用户(签入时)的项目特定忽略规则,~/.gitignore 用于用户该计算机上该用户的任何项目的特定忽略规则。根据目标,您可以选择输入条目的位置。
git rm --cached <path-name> 将从存储库中删除它,但将其保留在本地。 git update-index --skip-worktree <path-name> 将忽略对文件的更改,但将其保留在存储库中。出于好奇:为什么要排除 sln 文件?它是 .Net 解决方案的重要组成部分,对吧?