2008-12-30 116 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]的分支。然而,我認爲代碼學方法更簡單,更清潔。

相關問題