如何在git中删除subversion远程仓库?

56

我有一个git仓库,最初是使用git-svn创建的。现在我有一个git服务器可以推送到,但svn仓库已经丢失了。我能删除svn远程吗?如何操作?

可以通过以下命令删除svn远程:
``` git remote rm svn ```
4个回答

80
你可以编辑 .git/config 文件并删除与你想要移除的远程关联的部分。
你想要删除的行大概长成这个样子:
[svn-remote "svn"]
    url = url-of-svn-repository/trunk
    fetch = :refs/remotes/git-svn
这将从Git中移除远程,但您仍将拥有Git提交和SVN提交之间的关系,存储在.git/svn中。如果要摆脱所有SVN远程,请删除整个目录。如果要摆脱一个SVN远程并保留其他远程,则需要查看目录结构并仅删除与要删除的远程相关联的那些内容。

27
谢谢 Eric,我还需要删除 .git/svn 目录。 - jlconlin
1
感谢 - 已包含在答案中。 - Eric
12
我发现了一个位于.git/refs/remote/git-svn中的引用。它指向从git-svn提交的最后一次提交。 - Rafael Raposo

29

使用大多数*nix shells,如bash或mingw32:

cd ~/your_repo
git config --remove-section svn

或者你查看配置文件时所用的任何部分(cat .git/config)。例如,下一行将删除描述在Eric's solution中的相同配置部分:

git config --remove-section svn-remote.svn

接下来删除.git文件夹中的所有svn内容(包括svn、日志和引用),这也是Sergey所建议的。

rm -rf .git/svn .git/{logs/,}refs/remotes/{git-,}svn/

附加的垃圾回收:

git gc

source/credits


我的远程svn引用存储为文件,所以我必须从rm命令中删除尾部斜杠,这是不必要的。 - rindeal

22

埃里克的回答是正确的,但不全面。即使在拉斐尔·拉波索(Rafael Raposo)的评论后也是如此。我希望我可以对答案进行评论而不是发布一个新的答案,但规则是在达到50声望之前无法进行评论。

补充内容如下:

find .git -type f -exec grep -nH git-svn "{}" \;

显示我在这两个文件中有引用:

./.git/info/refs:4:fd34a5c...8073f3 refs/remotes/git-svn
./.git/packed-refs:5:fd34a5...cd6c33 refs/remotes/git-svn

在我移除那些引用之前,我能够看到 git-svn 执行 git log


1
你是怎么移除那些引用的?我不明白。 - CommaToast
1
我发现我必须经过同样的流程,但是搜索“trunk”而不是“git-svn”,以摆脱“origin/trunk”伪分支。 - bdesham
Windows 版本,拜托了? ;) - drzaus
1
我猜你想要cd进入**.git文件夹并在其中的文件中搜索“git-svn”文本。正如我所提到的,我找到了两个文件 - “.git/info/refs”和“.git/packed-refs”。用你喜欢的编辑器打开它们(不要使用记事本,因为它无法正确解析内容并在保存时添加一些垃圾)。打开编辑器并删除引用git-svn**的行。 - Sergey M
对于 Windows(对于 Linux 也是如此),您可以跳过第一个代码框,因为它只是找到.git/info/refs.git/packed-refs文件的垫脚石。 - chronospoon

5

如果您没有任何本地配置,且不想在 .git 目录中瞎搞,那么只需将 Git 存储库从远程 Git 克隆到一个新目录,然后删除旧目录即可。

如果您有一些简单的本地配置(例如与全局配置不同的用户/电子邮件),那么这种方法可能仍然更容易,然后在克隆操作后恢复任何本地配置。


即使完成了上述所有清理工作,SVN 的远程跟踪分支仍然会出现。如果可以进行干净的克隆,则肯定比其他任何方法都要容易得多。 - Martin Geisse
@MartinGeisse 谢谢 - 我不知道为什么其他人要费尽心思提供复杂的答案来解决这个问题,当这个简单而有效的解决方案已经足够了。 - jhabbott

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接