如何在svn和/或git中“unversion”一个文件

时间:2008-08-26 10:20:41

标签: svn git version-control versioning

一直发生在我身上。我不小心对文件进行了版本控制,我不想进行版本控制(即开发人员/机器特定的配置文件)。

如果我提交这个文件,我会搞乱所有其他开发者机器上的路径 - 他们会不高兴。

如果我从版本控制中删除该文件,它将从其他开发者机器中删除 - 他们会不高兴。

如果我选择永不提交文件,我总是有一个“肮脏”的结账 - 我很不高兴。

是一种干净的方法来“修改”来自修订控制的文件,这会导致没有人感到不快乐吗?

编辑:尝试澄清一点:我已经将文件提交到存储库,我只想将其从版本控制中删除 - 我特别不希望它从每个进行结帐的人身上删除。我最初希望它被忽略。

答案:如果我接受第二个答案,那就是this。它回答了关于git的问题 - 接受的答案是关于svn。

15 个答案:

答案 0 :(得分:64)

在Git中,为了从树中删除它,而不是从我认为你想要的工作目录中删除它,你可以使用--cached标志,即:

git rm --cached <filename>

答案 1 :(得分:34)

SVN 1.5版支持从存储库中删除/删除文件而不会丢失本地文件

取自http://subversion.tigris.org/svn_1.5_releasenotes.html

新的--keep-local选项在删除后保留路径..

删除(删除)现在使用--keep-local选项在本地保留其目标,因此即使未修改也不会删除路径。

答案 2 :(得分:7)

如果您在svn&amp;中意外“添加”了某个文件你没有提交它,你可以还原该文件&amp;它将删除添加。

答案 3 :(得分:6)

没试过......

在git中,如果您的更改尚未传播到另一个存储库,那么应该能够git rm受影响的文件,git rebase --interactive重新排序删除提交就在您不小心添加了违规文件的提交之后,然后将这两个提交压缩在一起。

当然,如果其他人撤消了您的更改,这将无济于事。

答案 4 :(得分:4)

听起来你已经添加了文件并将其提交给subversion(我假设你使用的是Subversion)。如果是这种情况,那么只有两种方法可以删除该文件:

  1. 将文件标记为已删除并提交。
  2. 执行svnadmin dump,过滤掉您意外提交文件的修订版并执行svnadmin load
  3. 相信我,你真的不想做第二个。它将使存储库的所有工作副本无效。最好是做数字1,将文件标记为忽略并道歉。

答案 5 :(得分:3)

查找svn:ignore和.gitignore - 这些功能允许您在结帐时有额外的文件被RCS忽略(执行“状态”操作时或其他任何操作)。

对于特定于机器的配置文件,一个好的选择是检入一个名为“.sample”扩展名的文件,即。 config.xml.sample。个别开发人员会在config.xml中复制此文件,并为其系统进行调整。使用svn:ignore或.gitignore,您可以确保无版本的config.xml文件不会一直显示为脏。

响应您的编辑:如果您现在从存储库中删除该文件,那么您的开发人员将在下次更新时遇到冲突(假设他们已经更改了系统的文件)。他们不会失去他们的本地变化,他们将从某个地方恢复。如果他们没有进行任何本地更改,那么他们的配置文件将会消失,但他们可以从源代码控制中重新获取前一个并使用它。

答案 6 :(得分:3)

完全从git存储库中删除文件(假设您提交了一个包含密码的文件,或意外提交的临时文件)

git filter-branch --index-filter 'git update-index --remove filename' HEAD

然后我认为你必须提交,并且如果它在远程分支中推送-f(请记住,如果你开始更改存储库的历史记录它可能会让人烦恼......如果他们之前已经从你那里撤了过来,他们仍然可以拥有该文件)

答案 7 :(得分:2)

删除源代码管理中已有的文件:

git rm <filename>

然后

git commit -m ...

您应该将要忽略的每个文件添加到.gitignore文件中。我另外总是检查.gitignore文件到我的存储库,所以如果有人检查他的机器上的代码,并且文件再次生成,他将不会'看到'它'脏'。

当然,如果您已经提交了该文件而其他人在另一台计算机上进行了更改,则必须更改每个本地存储库以修改历史记录。至少这是git可能的解决方案。我不认为svn会让你这样做。

如果文件已经在主存储库(git)或服务器(svn)中,我认为没有比仅在另一次提交中删除文件更好的解决方案。

答案 8 :(得分:1)

对于SVN,您可以还原尚未提交的文件。在TortoiseSVN中,您只需在提交窗口中右键单击该文件,然后选择Revert ...

在命令行上使用svn revert [file]

因为我从未使用它而不了解GIT。

答案 9 :(得分:1)

SVN中的两个简单步骤:
1.在父目录中添加此目录&s; svn:ignore属性:

svn propedit svn:ignore .  

2。删除目录:

svn rm mydir

3。提交

请注意,当其他开发者执行 svn更新时,该目录将不会被删除。 SVN只是反转它。

答案 10 :(得分:0)

据我所知,一旦提交,就没有简单的方法从svn中的版本控制中删除添加的文件。

您必须将文件保存在其他位置并从版本控制中删除它。然后再次复制备份。

毕竟这是一个版本控制系统......;)

答案 11 :(得分:0)

您可以使用global-ignore设置从subversion中排除文件 http://svnbook.red-bean.com/en/1.1/ch07.html#svn-ch-7-sect-1.3.2
查看文档了解详细信息

答案 12 :(得分:0)

  

我知道我选择永不提交文件,我总是有一个“肮脏”的结账 - 我很不高兴。

关于这一点,您可能希望.gitignore 像其他人建议的文件,或使用像这样的方案 在this answer中描述 我的。

答案 13 :(得分:0)

您可以使用此命令撤消当前目录中的所有文件。 sed位反转顺序,因此svn可以处理它:

find . | sed '1!G;h;$!d'| awk '{print "svn rm --keep-local " $1}'

正如其他答案中所述,单个文件是无版本的:

svn rm --keep-local yourFileNameXXX

答案 14 :(得分:0)

在Windows中,如果您要查找的是将文件夹复制到其他位置并将其从git中删除,以便您不再看到图标,则只需删除.git文件夹即可。 .git文件夹是隐藏的,因此您必须转到主文件夹下的“组织/文件夹和搜索选项,显示隐藏文件”选项。它应该取消它。