暂时从git中取消跟踪文件

我已经在我的机器上设置了一个本地git。初始化git时,我添加了预编译的库和二进制文件。然而,现在在我的开发过程中,我不想间歇性地签入这些文件。我不想从回购中删除这些文件。是否有任何方法不跟踪这些文件,直到我完成我的开发。(我想我不能使用.gitignore,因为它只适用于那些不在git中的文件。我想暂时禁用文件跟踪。)

529934 次浏览

git索引更新应该做你想做的事情

这将告诉git你想开始忽略文件
的更改 # EYZ0 < / p >

当你想再次开始跟踪时
# EYZ0 < / p >

Github文档:update-index

git rm --cached

但是,您不应该首先提交已编译的二进制文件和外部依赖项。使用像Bundler这样的工具来把它们拉进来。

手册在2.4节中提到了这一点:“撤销事情”。基本上,您需要做的是将某些文件的索引状态重置为HEAD状态,即最近一次签出(或提交)时的状态。这将取消将文件暂存到当前索引。执行该任务的命令为git reset.[1]

所以,你要执行的命令是:

git reset HEAD /path/to/file

新版本的git(我相信从1.6左右开始)在执行git status时给出了这个命令(以及更多)作为提示。这些版本是非常用户友好的。一个个人建议:如果您只暂存几个文件,请使用git add -i。这将启动交互式登台工具,这使事情变得特别简单。此外,我强烈推荐阅读这本书,因为它非常明确地介绍了git在实际情况中的使用。

[1] # EYZ0

我假设您正在询问如何删除构建文件夹或bin文件夹中的所有文件,而不是分别选择每个文件。

您可以使用该命令:

# EYZ0

请确保您在构建目录的父目录中 这个命令将递归地“删除”bin/或build/文件夹中的所有文件。我的意思是git会假装那些文件被“删除”了,并且这些文件不会被跟踪。git实际上将这些文件标记为删除模式

请确保您的.gitignore为即将到来的提交做好了准备 # EYZ0 < / p >

你可以让你的文件不被追踪

git rm -r --cached <file>

使用

git add -u

他们会推你或者做任何你想做的事。

不是对最初问题的回答。但这可能会帮助到某些人。

要查看您所做的更改(知道哪些文件被标记为——assume-unchanged)

git ls-files -v
结果文件列表将有一个字符的前缀(例如:H或H) 如果是小写字母(即h),则文件为标志——assume-unchanged

使用以下命令取消跟踪文件

git rm --cached <file path>

删除所有Untrack文件。试试这个终端命令

 git clean -fdx

assume-unchanged的替代方案是skip-worktree。后者有不同的含义,类似于“Git不应该跟踪这个文件”。开发人员可以(也被鼓励)进行本地更改。

在您不希望跟踪构建文件(通常是较大的)更改的情况下,assume-unchanged是一个不错的选择。

在这种情况下,文件应该有默认内容,开发人员可以自由地在本地修改文件,但不应该将本地更改检查回远程repo, skip-worktree是更好的选择。

另一个优雅的选择是在repo中有一个默认文件。假设文件名是BuildConfig.Default.cfg。开发人员应该在本地将其重命名为BuildConfig.cfg,并且他们可以进行任何他们需要的本地更改。现在添加BuildConfig.cfg.gitignore,这样文件就不被跟踪了。

参见这个问题,它在接受的答案中有一些很好的背景信息。

运行

git rm -r --cached file_to_git_ignore
然后转到gitignore文件 添加path_to_file_to_git_ignore

祝你好运