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

它总是发生在我身上。 我不小心版本文件,我不想被版本化(即开发/机器特定的configuration文件)。

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

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

如果我select从不提交文件,我总是会有一个“脏”的结账 – 我不高兴。

是一个干净的方式来“解除”版本控制的文件,这将导致没有人不高兴?

编辑:试图澄清一点:我已经将文件提交到存储库,我只想从版本中删除它 – 我特别不希望它从每个做结账的人物理删除。 我最初希望它被忽略。

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

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

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

新build–keep-local选项在删除后保留path

删除(remove)现在需要一个–keep-local选项来在本地保留它的目标,所以即使没有修改,path也不会被删除。

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

git rm --cached <filename> 

如果你不小心在svn中“添加”一个文件,而你还没有提交,你可以恢复该文件并删除添加。

没有尝试过…

在混帐,如果你的变化还没有传播到另一个存储库,你应该能够受影响的文件(S), git rebase --interactive重新sorting删除提交刚刚提交后,你不小心添加有问题的文件,然后压缩这两个提交在一起。

当然,如果有其他人拉你的改变,这也无济于事。

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

  1. 将文件标记为已删除并提交。
  2. 执行svnadmin dump ,过滤掉意外提交文件的修订版并执行svnadmin load

相信我,你不是真的想要做第二个。它会使存储库的所有工作副本无效。 最好是做1号,标记为忽略的文件,并表示歉意。

查找svn:ignore和.gitignore – 这些function允许你在你的RCS中(在进行“状态”操作或其他操作时)忽略你的checkout中的额外文件。

对于特定于机器的configuration文件,一个不错的select是检入一个名为扩展名为“.sample”的文件。 config.xml.sample 。 个别开发人员会在config.xml中创build这个文件的副本,并为其系统进行调整。 使用svn:ignore或.gitignore,可以确保未版本化的config.xml文件始终不会显示为脏。

为了响应你的编辑:如果你现在从版本库中删除了这个文件,那么你的开发者在下次更新的时候会发生冲突(假设他们已经全部更改了系统的文件)。 他们不会失去本地的变化,他们会从某个地方得到回报。 如果他们没有做出任何本地更改,那么他们的configuration文件将会消失,但是他们可以重新从源代码pipe理中重新获得并使用它。

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

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

然后,我认为你必须提交,如果它在远程分支中,则推-f(记住,如果你开始更改存储库的历史logging,它可能会激怒人们,如果他们之前已经从你那里拿走了,他们仍然可以拥有这个文件)

要删除已经在源代码pipe理中的文件:

 git rm <filename> 

接着

 git commit -m ... 

您应该将每个要忽略的文件添加到.gitignore文件。 另外我总是把.gitignore文件检查到我的仓库,所以如果有人在他的机器上签出代码,并且文件被重新生成,他不会“看”它是“脏的”。

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

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

对于SVN,您可以恢复尚未提交的文件。 在TortoiseSVN中,您只需在提交窗口中右键单击该文件,然后select还原…

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

不知道GIT,因为我从来没有用过它。

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

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

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

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

我在那里select永远不要提交文件,我总是有一个“脏”的结帐 – 我不高兴。

关于这个特定的问题,你可能需要按照其他人的build议去创build文件,或者使用一个类似我的答案中描述的scheme。

SVN中的两个简单步骤:
1.将此目录添加到父目录的svn:ignore属性中:

 svn propedit svn:ignore . 

2.删除目录:

 svn rm mydir 

3.承诺

请注意,当其他开发者进行svn更新时 ,该目录不会被删除。 SVN只是颠倒了它。

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

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

正如其他答案中已经指出的那样,单个文件不受版本控制:

 svn rm --keep-local yourFileNameXXX 

在Windows中,如果你正在寻找的是将文件夹复制到另一个位置,并从git中删除它,以便您不再看到图标,只需删除.git文件夹。 .git文件夹是隐藏的,所以你必须去你的主文件夹下的组织/文件夹和search选项,显示隐藏文件选项。 它应该颠倒它。