代码之家  ›  专栏  ›  技术社区  ›  Mo.

如何在SVN和/或Git中“解压缩”文件

  •  67
  • Mo.  · 技术社区  · 16 年前

    这件事总是发生在我身上。我无意中修改了一个文件,我不想被修改版本(即开发人员/机器特定的配置文件)。

    如果我提交这个文件,我会把所有其他开发人员机器上的路径弄乱——他们会不高兴的。

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

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

    从版本控制中“解压”文件是否是一种干净的方法,这会导致没有人不高兴?

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

    答:如果我能接受第二个答案,那就是 this . 它回答了我关于Git的问题-公认的答案是关于SVN的。

    15 回复  |  直到 16 年前
        1
  •  34
  •   brianadkins    15 年前

    SVN版本1.5支持在不丢失本地文件的情况下从存储库中删除文件

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

    new——保留本地选项在删除后保留路径。

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

        2
  •  62
  •   wxs    15 年前

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

    git rm --cached <filename>
    
        3
  •  8
  •   Glenn Slaven    16 年前

    如果您意外地在SVN中“添加”了一个文件,但尚未提交该文件,则可以还原该文件并将其删除。

        4
  •  7
  •   Kai    16 年前

    没有尝试过…

    在Git中,如果您的更改没有传播到另一个存储库,那么 应该 能够 git rm 受影响的文件, git rebase --interactive 要重新排序删除提交,请在意外添加有问题的文件的提交之后进行,然后将这两个提交挤压在一起。

    当然,如果有人拉了你的更改,这不会有帮助。

        5
  •  5
  •   Sir Rippov the Maple    16 年前

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

    1. 将文件标记为已删除并提交。
    2. 表演一个 svnadmin dump ,筛选出意外提交文件的修订并执行 svnadmin load .

    相信我,你真的不想做第二件事。它将使存储库的所有工作副本失效。最好是做1号,将文件标记为忽略并道歉。

        6
  •  4
  •   Greg Hewgill    16 年前

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

    对于特定于机器的配置文件,一个好的选择是签入一个扩展名为“.sample”的文件,即。 config.xml.sample . 单个开发人员将在 config.xml 为他们的系统做些调整。使用svn:ignore或.gitignore可以确保 配置XML 文件不会一直显示为脏文件。

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

        7
  •  4
  •   dbr    16 年前

    从Git存储库中完全删除一个文件(例如,您提交了一个包含密码的文件,或者意外地提交了临时文件)

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

    然后我认为您必须提交,如果它在远程分支中,则必须推送-f(请记住,如果您开始更改存储库的历史记录,它可能会使人恼火)。如果他们以前从你这里拉过车,他们还可以拿到文件)

        8
  •  3
  •   Sergio Acosta    16 年前

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

    git rm <filename>
    

    然后

    git commit -m ...
    

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

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

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

        9
  •  2
  •   Magnus Westin    16 年前

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

    在命令行上使用svn revert[文件]

    不知道吉特,因为我从来没用过。

        10
  •  1
  •   FantaMango77    16 年前

    据我所知,在SVN中一旦提交了一个添加的文件,就没有一种简单的方法可以从版本控制中删除它。

    您必须将该文件保存到其他地方,然后从版本控制中将其删除。再把备份复制回去。

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

        11
  •  1
  •   paan    16 年前

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

        12
  •  1
  •   Community CDub    8 年前

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

    关于这一点,你可能想 .gitignore 其他人建议的文件,或使用类似的方案 描述于 this answer 我的。

        13
  •  1
  •   Manu Manjunath    13 年前

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

    svn propedit svn:ignore .  
    

    2。删除目录:

    svn rm mydir
    

    三。提交

    请注意,当其他开发人员执行 支持向量机更新 ,那个目录 不会 获取删除。SVN只是取消版本。

        14
  •  0
  •   PerfectGamesOnline.com    9 年前

    使用此命令可以解压缩当前目录中的所有文件。这个 sed 位反转顺序,以便SVN可以处理它:

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

    如其他答案中所述,单个文件的版本不受此限制:

    svn rm --keep-local yourFileNameXXX
    
        15
  •  0
  •   live-love    8 年前

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