如何在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)的文件。 如果是这种情况,那么只有两种方法可以删除该文件:
- 将文件标记为已删除并提交。
- 执行
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选项,显示隐藏文件选项。 它应该颠倒它。