编程上如何区分git-svn和git仓库?

4
我已经设置了一些shell内容,根据当前工作目录中包含的版本控制库的类型动态定义别名-因此,例如,“d”运行“svn diff”或“git diff”,具体取决于什么。 (基于这篇博客文章,如果有人感兴趣...)
我想根据是否在git repo与git-svn repo中定义一些别名不同。 有没有一种简单的方法来区分这两者之间的差异?
3个回答

5
您可以使用git config命令的输出来区分git和git-svn存储库。
git config --get svn-remote.svn.url

如果有同步svn的URL,应该返回正在同步的svn URL。


5

在决定哪些仓库确切是git-svn仓库时,您需要小心。一个仓库可能包含多个svn仓库。

Kafka的解决方案仅在使用-s或--std-layout选项克隆svn仓库时才能生效,在其中实际上确实有一个分支trunk。

Codelogic的答案仅在存在名为svn的svn仓库时才能生效--没有必要满足这一条件。

检查配置中是否有svn-remote的最简单方法是:

$ git config --get-regexp ^svn-remote

这将查找任何已配置的git-svn存储库,无论它们叫什么。如果有匹配项,则状态码为0;如果没有匹配项,则状态码为1。

但是,这并不意味着svn存储库真的被使用。可能也是因为有人将svn存储库导入,但将其用作子模块或子树合并,甚至根本没有使用。如果在git-svn存储库中启用了元数据,您可以使用以下内容查看当前HEAD中是否使用了任何svn修订:

$ git rev-list -1 --grep='git-svn-id' HEAD

但这可能有点过于复杂。您决定。

谢谢 - rev-list 位有点复杂,不适合我的目的;在自己再多探索一下之后,我可能只会做 'if [ -d .git/svn ]' 然后从那里开始。我知道它不能处理一般情况,但它涵盖了我所有的情况。再次感谢。 - genehack

0

还有一个名为trunk的分支和一个名为trunk@[REV]的分支。 不过,我认为codelogics的方法更简单、更清晰。


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