如何在svn和/或git中“取消版本”文件

如何在svn和/或git中“取消版本”文件

How to “unversion” a file in either svn and/or git

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

如果提交此文件,我将弄乱所有其他开发人员机器上的路径-他们将感到不满意。

如果我确实从版本控制中删除了该文件,则将从其他开发人员的计算机上删除该文件-他们将不满意。

如果我选择从不提交文件,那么我总是有一个"脏"的结帐-我很不高兴。

是一种从版本控制"取消版本"文件的干净方法,这将导致没有人不满意吗?

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

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


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

1
git rm --cached <filename>

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

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

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

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


如果您不小心在svn中"添加"了文件但尚未提交,则可以还原该文件并删除添加的文件。


没有尝试过...

在git中,如果您的更改尚未传播到另一个存储库,则应该能够git rm受影响的文件,git rebase --interactive将删除提交重新排序,使其恰好在您意外添加了提交之后破坏文件,然后将这两个提交压缩在一起。

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


听起来您已经添加了文件并将其提交给Subversion(我假设您正在使用Subversion)。如果真是这样,那么只有两种方法来删除该文件:

  • 将文件标记为已删除并提交。
  • 执行svnadmin dump,过滤掉意外提交文件的修订,然后执行svnadmin load
  • 相信我,您真的不想做第2个。它将使存储库的所有工作副本失效。最好执行1号操作,将文件标记为已忽略并表示歉意。


    要从git存储库中完全删除文件(例如,您提交了其中包含密码的文件,或者不小心提交了临时文件)

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

    然后,我认为您必须提交,如果它在远程分支中,则推-f(请记住,如果您开始更改存储库的历史记录,可能会使人烦恼..如果他们以前从您那里拉过,他们仍然可以拥有文件)


    查找svn:ignore和.gitignore-这些功能使您可以在结帐时添加一些其他文件,而这些文件会被RCS忽略(执行"状态"操作或其他操作时)。

    对于特定于计算机的配置文件,一个不错的选择是检入一个带有额外" .sample"扩展名的文件,即。 config.xml.sample。各个开发人员将在config.xml中复制此文件,并对其进行调整。使用svn:ignore或.gitignore可以确保未版本化的config.xml文件不会一直显示为脏文件。

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


    要删除源控制中已经存在的文件:

    1
    git rm <filename>

    接着

    1
    git commit -m ...

    您应该将每个要忽略的文件添加到.gitignore文件中。另外,我总是将.gitignore文件检查到我的存储库中,因此,如果有人在他的计算机上签出代码,并且再次生成该文件,他将不会"将其视为"肮脏"。

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

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


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

    1
    svn propedit svn:ignore .

    2.删除目录:

    1
    svn rm mydir

    3.提交

    请注意,当其他开发人员进行svn更新时,该目录不会被删除。 SVN只是取消版本控制。


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

    在命令行上使用svn revert

     下载地址

    因为我从没使用过,所以不了解GIT。


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


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

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

    正如其他答案中已经提到的那样,单个文件没有版本:

    1
    svn rm --keep-local yourFileNameXXX

    I there f I choose to never commit the file, I always have a"dirty" checkout - I am unhappy.

    关于这一点,您可能要.gitignore
    其他建议的文件,或使用类似的方案
    在此描述
    回答
    我的


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


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

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

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


    推荐阅读