赞
踩
目录
在使用Git等版本管理工具时,通常有两种情况,您希望版本管理工具GIT忽略对工作目录或文件本身的更改:
在案例1)中,通常具有生成过程的输出、中间文件或生成的最终结果。这些是你想要UNTRACKED的文件,也就是说Git根本不应该跟踪这些文件。所以,你希望它们不被跟踪。
在案例2)中,通常您的文件的本地版本与跟踪版本不同,但您不希望将本地更改提交到Git。例如,如果使用包含数据库连接字符串的配置文件(如web.config)。您希望该文件被跟踪,因为它是应用程序的重要组成部分,但您希望忽略对本地系统的更改,因为本地版本将包含您的本地设置,这些设置对于项目中的每个开发人员都是不同的。因此,您希望它们被跟踪,忽略本地更改。
以下是在Git中忽略文件的四种方法:
我们设置了一个小项目来演示这篇文章:
我们使用Gui工具SourceTree添加和提交文件:
.gitignore文件的用法非常流行,并且在其他地方有很好的描述,所以我不会详细介绍。值得一提的是,此方法计划应用于您希望GLOBALY UNTRACK的文件。在使用该存储库的所有系统上,Git会完全忽略.gitignore中的文件。
您需要添加.gitignore文件,并将要忽略的文件添加到该文件中。您需要将.gitignore添加并提交到Git。
此方法可以应用于未跟踪的文件,并且您希望忽略它们。不宜在Git已跟踪的文件上尝试此方法。将Git跟踪的文件添加到.gitignore不会提供任何结果。有人可能会认为,如果我将跟踪的文件添加到.gitignore,从那时起它就不会被跟踪,但它不是那样工作的。
让我们假设我们有一个我们不想跟踪的spam1.txt文件。SourceTree将报告它在那里:
您需要添加.gitignore文件,并将要忽略的文件添加到该文件中。您需要将.gitignore添加并提交到Git。以下是现在的情况:
因此,SourceTree不再看到spam1.txt。它确实会看到一个附加文件.gitignore。所以文件spam1.txt是GLOBALY未跟踪的。
您需要添加.git/info/exclude文件,并将您要忽略的文件添加到该文件中。格式与.gitignore文件的格式相同。
此方法与.gitignore方法非常相似,只是文件.git/info/exclude 本身不是存储库的一部分,因此它的影响是本地的。此方法计划应用于要LOCALLY UNTRACK的文件。
让我们假设我们有一个我们不想跟踪的spam2.txt文件。SourceTree将报告它在那里:
您需要添加.git/info/exclude文件,并将您要忽略的文件添加到该文件中。格式与.gitignore文件的格式相同。以下是现在的情况:
SourceTree不再看到spam2.txt文件。所以文件spam2.txt是LOCALY UNTRACK。
该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]强烈反对使用这种方法。
让我们添加config1.txt文件并将其提交到存储库。
然后对文件 config1.txt 进行一些更改,并且SourceTree报告文件已被编辑:
在命令提示符下,您需要添加一个命令以假定文件未更改。源代码树将不再报告文件已被编辑。
SourceTree不再将config1.txt文件视为已修改,尽管该文件实际上已被本地修改,因此,文件config1.txt被跟踪,本地更改被忽略。
互联网上的许多人推荐该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
让我们添加config2.txt文件并将其提交到存储库。
然后对文件config3.txt进行一些更改,并且SourceTree报告该文件已被编辑:
在命令提示符下,您需要添加命令skip-worktree。源代码树将不再报告文件已被编辑。
SourceTree不再看到config2.txt文件已修改,尽管该文件实际上已被本地修改,因此,文件config2.txt被跟踪,本地更改被忽略。
有TRACKED文件的用例,LOCAL CHANGES IGNORED非常强大。仅提及每个开发人员ASP.NET都将使用至少一个数据库连接字符串在本地修改的web.config文件。在这种情况下使用.gitignore并不能解决问题。合适的方法是在Git中使用skip-worktree选项。
Git有很多选项,但命令行界面对用户不友好。令人非常失望的是,即使是 GUI SourceTree也没有提供上下文菜单选项来设置文件“本地更改未跟踪”标志。
https://www.codeproject.com/Articles/5363864/Git-4-Ways-to-Ignore-Files
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。