Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
暂时取消从git跟踪文件_Git_Github_Repository - Fatal编程技术网

暂时取消从git跟踪文件

暂时取消从git跟踪文件,git,github,repository,Git,Github,Repository,我已经在我的机器上安装了本地git。当我初始化git时,我添加了预编译的lib和二进制文件。然而,现在在我的开发过程中,我不想断断续续地签入这些文件。我不想从repo中删除这些文件。有没有办法在我完成开发之前不跟踪这些文件。(我想我不能使用.gitignore,因为它只适用于那些不在git中的文件。我想暂时禁用文件跟踪。)应该做你想做的事 这将告诉git您希望开始忽略对文件的更改 git更新索引--假定路径/到/文件未更改 当您想重新开始跟踪时 git更新索引——不假设路径/到/文件未更改 但

我已经在我的机器上安装了本地git。当我初始化git时,我添加了预编译的lib和二进制文件。然而,现在在我的开发过程中,我不想断断续续地签入这些文件。我不想从repo中删除这些文件。有没有办法在我完成开发之前不跟踪这些文件。(我想我不能使用.gitignore,因为它只适用于那些不在git中的文件。我想暂时禁用文件跟踪。)

应该做你想做的事

这将告诉git您希望开始忽略对文件的更改
git更新索引--假定路径/到/文件未更改

当您想重新开始跟踪时
git更新索引——不假设路径/到/文件未更改


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

git手册在第2.4节“撤销东西”中提到了这一点。基本上,您需要做的是将某些文件的索引状态重置回HEAD状态,即最新签出(或提交)的状态。这将撤消将文件转移到当前索引的操作。此任务的命令是
git reset
[1]

因此,您必须执行的命令是:

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


[1]

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

您可以使用以下命令:

git rm-r-f/build\*


确保您位于生成目录的父目录中。
此命令将递归地“删除”bin/或build/文件夹中的所有文件。“删除”这个词的意思是git会假装那些文件被“删除”,而这些文件不会被跟踪。git确实将这些文件标记为处于删除模式

请确保您的.gitignore已准备好进行即将进行的提交。

之后,您可以不跟踪您的文件

git rm -r --cached <file>

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

不是对原始问题的回答。但这可能会帮助一些人

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

结果文件列表将有一个带有一个字符的前缀(例如:H或H)
如果是小写字母(即h),则该文件已标记-假定未更改

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

git ls-files -v
git rm --cached <file path>
git-rm——缓存

删除所有未跟踪的文件。试试这个终端命令

 git clean -fdx

假设未更改
的替代方法是
跳过工作树
。后者有着不同的含义,比如“Git不应该跟踪这个文件。开发人员可以并且被鼓励进行本地更改。”

在您不希望跟踪生成文件(通常较大)的更改的情况下,
假设unchanged
是一个不错的选择

如果文件应该具有默认内容,并且开发人员可以在本地自由修改文件,但不应将其本地更改检查回远程repo,
skip worktree
是更好的选择

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


看看哪个在接受的答案中有一些好的背景信息。

最后一个命令的相关可能重复,该命令实际上适用于我意外提交的开发文件,谢谢:)为什么不使用git rm-r--cached?@Ehsan似乎
git rm--cached
会导致删除其他机器上的本地副本,在下一次拉动时,检查同一分支的位置。请参阅,尤其是下面的讨论。不适用于我,当我对文件进行更改时,它仍然会添加到包含的更改中。我可以排除,但在某个时候,它可能会意外地被添加进来。假定-unchanged不是用于此目的的。可能想读一下这篇文章,我同意
git reset[file]
是解压文件最简单的方法。解压和解压是不同的事情Dont forget-r选项(递归)对于目录:git-rm-r--cached这实际上是正确的答案,根据:
git-rm--cached.DS\u Store
然后它打印
rm'../.DS\u Store'
,本地文件被删除??!(
git版本2.6.4(Apple git-63)
)在这里得到了答案这不是正确的答案,因为这将删除源代码中的文件。OP希望忽略该文件的本地更改,而不是删除对该文件的跟踪。警告:它还将删除您希望取消跟踪的文件。解决方案是将所有文件复制到某个位置,并在提交后将其复制回。这将从磁盘中而不是从git历史记录中删除文件。因此,使用
git ls files-v|grep“^h”
只查看
——假定未更改的文件。如果您需要对Windows更友好的内容:
powershell“git ls files-v|?{$\uCmatch'^h}
应该这样做。
git rm --cached <file path>
 git clean -fdx