我有一个最初使用 git-svn 创建的 git 存储库。现在我有一个推送到的 git 服务器,但 svn 存储库已丢失。我可以删除 svn 远程吗?怎么办?
您可以编辑
.git/config
文件并删除与要删除的遥控器关联的部分。
您要删除的线条可能大致如下所示:
[svn-remote "svn"]
url = url-of-svn-repository/trunk
fetch = :refs/remotes/git-svn
这将从 Git 中删除远程,但您仍然可以在
.git/svn
中存储 Git 提交和 SVN 提交之间的关系。如果您想删除所有 SVN 遥控器,您可以删除整个目录。如果您只想删除一个 SVN 遥控器并保留其他遥控器,则需要查看目录结构并仅删除与要删除的遥控器关联的目录。
通过大多数 *nix shell、bash 或 mingw32 执行此操作:
cd ~/your_repo
git config --remove-section svn
或查看配置时看到的任何部分(
cat .git/config
)。例如,下一行将删除 Eric 的解决方案中描述的相同配置部分:
git config --remove-section svn-remote.svn
接下来删除
.git
文件夹中的所有 svn 内容(svn、日志和参考)。这也是谢尔盖的建议。
rm -rf .git/svn .git/{logs/,}refs/remotes/{git-,}svn/
垃圾收集只是为了更好的措施:
git gc
Eric 的答案是正确的,但并不完整。即使在拉斐尔·拉波索发表评论之后。我希望我可以对答案发表评论而不是发布新答案,但规则是你在达到 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
如果您没有任何本地配置,并且想要放弃在
.git
目录中进行操作,只需将 git 存储库从 git 远程克隆到新目录并删除旧目录即可。
如果您确实有一些简单的本地配置(例如与全局配置不同的用户/电子邮件),那么执行此操作可能仍然更容易,然后在克隆后恢复任何本地配置。
就我而言,配置部分
[svn-remote "svn"]
位于此路径上的文件中:.git\svn\.metadata
。除了.metadata
文件之外,refs\remotes\origin\git-svn,trunk,trunk@228
上还有一个文件夹结构。
删除 svn
以及其中的所有内容,解决了问题。