2012-01-31 89 views
4

我想修改我的bash提示符打印出來,如果我在git-svn回購。我看到的git的svn回購有一個git的/ SVN文件夾,所以我可以檢查:如何判斷您是否在git-svn repo命令行中?

# Find the top level git folder 
_git_dir=`git rev-parse --show-toplevel 2> /dev/null` 
# Find svn folder 
_gsvn_check=`cd $_git_dir; ls .git/svn 2> /dev/null` 

但後來我發現我的正常的git回購具有的.git/svn的文件夾中。有什麼方法可以確定你在git-svn嗎?

+0

您可以發佈您的解決方案嗎? – 2012-02-02 15:27:25

+0

是的,我也會對你的解決方案感興趣。我一直在尋找一個這樣的主題,但還沒有發現任何東西 – madlee 2012-11-20 16:01:45

回答

3

,如果你在任何存儲庫運行任何git svn命令.git/svn目錄可以被創建 - 例如只是運行git svn info,因爲Carl Norum suggests會創建它。然而,稍好一點的測試可能是.git/svn存在並且是非空的,例如,

[ -d .git/svn ] && [ x != x"$(ls -A .git/svn/)" ] && echo Looks like git-svn 

如果你想有一個嚴格的測試,你可以看看通過HEAD任何歷史提交包含一個git-svn-id的消息 - 實際上這就是git svn info這樣做是放棄之前。例如:

[ x != x"$(git log -n 1 --grep='^\s*git-svn-id' --oneline)" ] && echo "git-svn!" 

......但它聽起來好像對您的用例來說可能太慢了。

git-svn.perl的源代碼描述了git-svn庫的佈局在不同的版本:

...因此,如果你願意,你可以寫測試,所有這些的要小心抓住所有不同的版本。

+0

好主意。另外,我找到了.git/svn/.metadata文件,它只在我的git-svn倉庫中,而不是我的git倉庫中,我運行git svn info,因此我可能會將它用於檢查。 – 2012-02-01 00:55:40

1

您應該可以使用git svn info。例如輸出一個混帳SVN倉庫:

Path: . 
URL: svn+ssh://url/path/to/something/trunk 
Repository Root: svn+ssh://path/to/something 
Repository UUID: c22683c8-8Bcb-47f9-aeb8-1c337d8f7a2d 
Revision: 12345 
Node Kind: directory 
Schedule: normal 
Last Changed Author: somebody 
Last Changed Rev: 12345 
Last Changed Date: 2012-01-24 16:38:36 -0800 (Tue, 24 Jan 2012) 

而對於一個普通的git回購:

Unable to determine upstream SVN information from working tree history 
+0

git svn info超級慢,我不希望每次運行時都顯示提示。我不知道如何git svn信息知道... – 2012-01-31 19:30:24

+0

你試圖把你的提示什麼信息? – 2012-01-31 19:31:55

+0

只是如果我在一個git svn回購,就是這樣,我只需要一個布爾值 – 2012-01-31 19:32:24

相關問題