74

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

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

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

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

从修订控制中“取消版本”文件的干净方法是否会导致没有人不高兴?

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

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

4

15 回答 15

81

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

git rm --cached <filename>
于 2010-06-04T22:27:57.350 回答
34

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

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

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

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

于 2009-06-30T21:59:45.613 回答
9

如果您不小心在 svn 中“添加”了一个文件并且您没有提交它,您可以恢复该文件并且它将删除添加。

于 2008-08-26T10:21:58.297 回答
6

没试过...

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

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

于 2008-08-26T10:47:05.117 回答
4

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

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

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

于 2008-08-26T10:52:31.203 回答
3

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

对于特定于机器的配置文件,一个不错的选择是签入一个带有额外“.sample”扩展名的文件,即。config.xml.sample. 个别开发人员会制作此文件的副本config.xml并针对他们的系统进行调整。使用 svn:ignore 或 .gitignore 您可以确保未版本控制的config.xml文件不会一直显示为脏文件。

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

于 2008-08-26T10:26:19.643 回答
3

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

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

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

于 2008-08-30T12:08:48.743 回答
2

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

git rm <filename>

进而

git commit -m ...

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

当然,如果您已经提交了文件并且其他人在另一台机器上获得了您的更改,那么您将不得不更改每个本地存储库以修改历史记录。至少这是一个可能的 git 解决方案。我不认为 svn 会让你这样做。

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

于 2008-08-26T10:24:29.650 回答
1

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

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

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

于 2008-08-26T10:24:40.477 回答
1

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

svn propedit svn:ignore .  

2.删除目录:

svn rm mydir

3. 提交

请注意,当其他开发人员执行svn update时,该目录不会被删除。SVN 只是将其取消版本化。

于 2012-03-21T05:36:59.577 回答
0

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

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

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

于 2008-08-26T10:25:06.760 回答
0

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

于 2008-08-26T10:27:37.333 回答
0

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

关于这一点,您可能想要.gitignore 其他人建议的文件,或者使用类似于我的这个答案 中描述的方案。

于 2008-08-31T12:11:48.510 回答
0

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

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

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

svn rm --keep-local yourFileNameXXX
于 2016-03-09T12:13:58.997 回答
0

在 Windows 中,如果您正在寻找的是将文件夹复制到另一个位置并将其从 git 中删除,这样您就看不到图标了,您只需删除 .git 文件夹。.git 文件夹是隐藏的,因此您必须转到主文件夹下的组织/文件夹和搜索选项,显示隐藏文件选项。它应该取消版本。

于 2016-12-06T17:31:51.380 回答