2008-12-30 114 views
4

我有一些shell的东西设置,动态定义别名取决于什么样的VC repo CWD包含 - 例如,'d'运行'svn diff'或'git diff',具体取决于。 (基于this blog post,如果有人感兴趣...)以编程方式告诉git-svn和git repos之间的区别?

我想定义一些别名,取决于我是否在git repo与git-svn repo中。有没有简单的方法来分辨两者之间的差异?

回答

5

在决定哪些存储库完全是git-svn存储库时,应该小心一点。存储库可能包含多个svn存储库。如果svn库与-s或--std布局选项克隆,其中有实际分支trunk

卡夫卡的解决方案才有效。

Codelogic的答案只有在存在一个名为svn的svn存储库时才会起作用 - 没有要求那是真的。

最简单的方法来检查是否有一个SVN远程的配置是:

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

这将找到任何配置的git-svn库,不管他们是所谓的。如果匹配,它将以状态0退出,如果没有匹配,则退出1。

但是,这并不意味着svn库真的被使用。也可能是某人导入了一个svn存储库,但是使用是作为子模块或作为子树合并,甚至根本不存在。如果混帐SVN仓库元数据已被打开,你可以看到,如果任何SVN版本已在当前HEAD通过使用像这样使用:

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

但是,这也许有点太令人费解。你决定。

+0

谢谢 - rev-list位对我而言太复杂;在我自己摸索一点之后,我可能会做'如果[-d .git/svn]'并从那里开始。我意识到它不会处理一般情况,但它涵盖了我的全部。 再次感谢。 – genehack 2009-01-02 21:19:48

5

您可以使用git config命令的输出来区分git和git-svn回购。

git config --get svn-remote.svn.url 

应该返回被同步到的svn URL,如果有的话。

0

还有一个叫trunk的分支和一个叫做trunk @ [REV]的分支。然而,我认为代码学方法更简单,更清洁。

相关问题