Git——忽略文件的4种方法

目录

1. 问题

2. 有4种方法可以忽略Git中的文件

3. 示例项目

4. 方法A——.gitignore的使用

4.1. 概述

4.2. 示例

5. 方法B——.git/info/exclude的使用

5.1. 概述

5.2 示例

6. 方法C——assume-unchanged的使用

6.1. 概述

6.2 示例

7. 方法D——skip-worktree的使用

7.1. 概述

7.2. 示例

8. 结论

9. 参考资料


1. 问题

在使用Git等版本管理工具时,通常有两种情况,您希望版本管理工具GIT忽略对工作目录或文件本身的更改:

  1. 垃圾邮件文件
  2. 本地版本文件

在案例1)中,通常具有生成过程的输出、中间文件或生成的最终结果。这些是你想要UNTRACKED的文件,也就是说Git根本不应该跟踪这些文件。所以,你希望它们不被跟踪。

在案例2)中,通常您的文件的本地版本与跟踪版本不同,但您不希望将本地更改提交到Git。例如,如果使用包含数据库连接字符串的配置文件(如web.config)。您希望该文件被跟踪,因为它是应用程序的重要组成部分,但您希望忽略对本地系统的更改,因为本地版本将包含您的本地设置,这些设置对于项目中的每个开发人员都是不同的。因此,您希望它们被跟踪,忽略本地更改。

2. 4种方法可以忽略Git中的文件

以下是在Git中忽略文件的四种方法:

  1. .gitignore(GLOBALY UNTRACKED)的用法
  2. .git/info/exclude 的用法(LOCALY UNTRACKED)
  3. assume-unchanged的用法(TRACKED,LOCAL CHANGES IGNORED)
  4. skip-worktree的用法(TRACKED,LOCAL CHANGES IGNORED)

3. 示例项目

我们设置了一个小项目来演示这篇文章:

我们使用Gui工具SourceTree添加和提交文件:

4. 方法A——.gitignore的使用

4.1. 概述

.gitignore文件的用法非常流行,并且在其他地方有很好的描述,所以我不会详细介绍。值得一提的是,此方法计划应用于您希望GLOBALY UNTRACK的文件。在使用该存储库的所有系统上,Git会完全忽略.gitignore中的文件。
您需要添加.gitignore文件,并将要忽略的文件添加到该文件中。您需要将.gitignore添加并提交到Git
此方法可以应用于未跟踪的文件,并且您希望忽略它们。不宜在Git已跟踪的文件上尝试此方法。将Git跟踪的文件添加到.gitignore不会提供任何结果。有人可能会认为,如果我将跟踪的文件添加到.gitignore,从那时起它就不会被跟踪,但它不是那样工作的。

4.2. 示例

让我们假设我们有一个我们不想跟踪的spam1.txt文件。SourceTree将报告它在那里:

您需要添加.gitignore文件,并将要忽略的文件添加到该文件中。您需要将.gitignore添加并提交到Git。以下是现在的情况:

因此,SourceTree不再看到spam1.txt。它确实会看到一个附加文件.gitignore。所以文件spam1.txtGLOBALY未跟踪的。

5. 方法B——.git/info/exclude的使用

5.1. 概述

您需要添加.git/info/exclude文件,并将您要忽略的文件添加到该文件中。格式与.gitignore文件的格式相同。

此方法与.gitignore方法非常相似,只是文件.git/info/exclude 本身不是存储库的一部分,因此它的影响是本地的。此方法计划应用于要LOCALLY UNTRACK的文件。

5.2 示例

让我们假设我们有一个我们不想跟踪的spam2.txt文件。SourceTree将报告它在那里:

您需要添加.git/info/exclude文件,并将您要忽略的文件添加到该文件中。格式与.gitignore文件的格式相同。以下是现在的情况:

SourceTree不再看到spam2.txt文件。所以文件spam2.txtLOCALY UNTRACK

6. 方法C——assume-unchanged的使用

6.1. 概述

assume-unchanged选项被设想为一种性能辅助工具,但经常在忽略文件的变通方法的上下文中提及。你明确告诉Git不要检查文件是否已更改。此方法计划应用于要忽略跟踪、本地更改的文件。

以下是此方法所需的命令:

To ignore local changes to tracked files:
git update-index --assume-unchanged [<file>...]

To track local changes again:
git update-index --no-assume-unchanged [<file>...]

To list all files assumed unchanged:
git ls-files -v | grep '^[[:lower:]]'

值得一提的是,互联网上的一些文章[3]强烈反对使用这种方法。

6.2 示例

让我们添加config1.txt文件并将其提交到存储库。

然后对文件 config1.txt 进行一些更改,并且SourceTree报告文件已被编辑:

在命令提示符下,您需要添加一个命令以假定文件未更改。源代码树将不再报告文件已被编辑。

SourceTree不再将config1.txt文件视为已修改,尽管该文件实际上已被本地修改,因此,文件config1.txt被跟踪,本地更改被忽略。

7. 方法D——skip-worktree的使用

7.1. 概述

互联网上的许多人推荐该skip-worktree选项作为忽略文件的正确方法。你明确告诉Git不要检查文件是否已更改。此方法计划应用于要忽略跟踪、本地更改的文件。

以下是此方法所需的命令:

To ignore local changes to tracked files:
git update-index --skip-worktree  [<file>...]

To track local changes again:
git update-index --no-skip-worktree [<file>...]

To list all files marked with skip-worktree:
git ls-files -v | grep ^S

7.2. 示例

让我们添加config2.txt文件并将其提交到存储库。

然后对文件config3.txt进行一些更改,并且SourceTree报告该文件已被编辑:

在命令提示符下,您需要添加命令skip-worktree。源代码树将不再报告文件已被编辑。

SourceTree不再看到config2.txt文件已修改,尽管该文件实际上已被本地修改,因此,文件config2.txt被跟踪,本地更改被忽略。

8. 结论

TRACKED文件的用例,LOCAL CHANGES IGNORED非常强大。仅提及每个开发人员ASP.NET都将使用至少一个数据库连接字符串在本地修改的web.config文件。在这种情况下使用.gitignore并不能解决问题。合适的方法是在Git中使用skip-worktree选项。

Git有很多选项,但命令行界面对用户不友好。令人非常失望的是,即使是 GUI SourceTree也没有提供上下文菜单选项来设置文件本地更改未跟踪标志。

9. 参考资料

https://www.codeproject.com/Articles/5363864/Git-4-Ways-to-Ignore-Files

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值