2009-08-07 24 views
23

我經常坐在顛覆的工作副本的中間,我想快速地做一個svn status來找出自上次以來我做了哪些更改報到。但svn status只適用於當前文件夾,它是兒童。 (同樣,對於svn up太)我怎麼找到給定的顛覆工作副本的根文件夾

我想一個快速的方法來改變Subversion工作拷貝的根文件夾,所以我可以運行svn status,看到已經改變所有文件,也許簽入或更新,然後回到我以前工作的地方。

回答

14

下面是我在回答第一次去:我編寫了一個名爲svnbase一個小bash腳本:

#!/bin/bash -u 

# this command outputs the top-most parent of the current folder that is still 
# under svn revision control to standard out 

# if the current folder is not under svn revision control, nothing is output 
# and a non-zero exit value is given 

parent="" 
grandparent="." 

while [ -d "$grandparent/.svn" ]; do 
    parent=$grandparent 
    grandparent="$parent/.." 
done 

if [ ! -z "$parent" ]; then 
    echo $parent 
else 
    exit 1 
fi 

所以,現在我可以這樣做:

[~/work/scripts/XXX/code/speech-detection/framework]$ cd $(svnbase) 
[~/work/scripts/XXX]$ svn status 
?  code/speech-detection/framework/output.old 
[~/work/scripts/XXX]$ cd - 
/home/XXXX/work/scripts/XXX/code/speech-detection/framework 
[~/work/scripts/XXX/code/speech-detection/framework]$ 
+0

下一個合乎邏輯的步驟將是該系列你輸入到命令的集成腳本本身。 – 2009-08-09 00:01:21

+2

如果你喜歡絕對路徑而不是相對路徑,請初始化:'grandparent = $(pwd)',並且每個循環:'grandparent = $(dirname parent)' – 2011-02-08 02:42:16

+5

這隻適用於Subversion版本高達1.6 。版本1.7和更高版本在根文件夾中只有一個'.svn'文件夾。 – ccpizza 2014-03-27 10:36:47

2

這是不可能的。 SVN可以從任何深度檢出,並且任何subdir都可以像全新的結帳一樣。

編輯:svnbase腳本prev評論工作,但它不是精確的。

+1

你是什麼意思? – 2009-08-07 01:14:23

+1

父目錄可能是另一個存儲庫的簽出。 – stepancheg 2009-08-07 16:06:43

7

如果您使用git-svn作爲您的Subversion客戶端,那麼您可以在本地使用Git命令透明地與Subversion存儲庫進行交互。當您在樹中的任何地方使用像git status這樣的命令時,Git會自動顯示您在整個存儲庫中處於待處理狀態。

2

實際上,如果你看看你的.svn/entries文件,你會發現通常在第6行附近列出的基地。無論如何,你的svn url格式會給你一些重要的線索:P 噢,我冒昧地看着,svn info也會告訴你。

......嘆了口氣,那不是你問的問題。我喜歡第一個答案解決方案:P

+1

svn info thing列出了您的存儲庫的根目錄,但不是工作副本。所以如果你沒有簽出整個版本庫,這將無濟於事,而上面的'svnbase'仍然會。 – 2009-08-07 02:56:57

+1

是的,同意了。 +1 :) – stran 2009-08-08 01:59:31

+2

使用SVN 1。7 svn info會列出工作拷貝的根目錄。 – Janosch 2012-07-10 08:12:45

6

在Windows上:

svn info . |findstr /C:"Working Copy Root Path:" 

在Linux上:

svn info . |grep -F "Working Copy Root Path:" 

可以分配給使用一個小的字符串操作的變量。 Windows版本:

FOR /F "delims=" %%i IN ('svn info . ^|findstr /C:"Working Copy Root Path:"') DO SET SOME_TEMP_VAR=%%i 
SET WORKING_COPY_ROOT=%SOME_TEMP_VAR:~24% 
3

在使用SVN版本1.9.3(r1718519),我跑這本Linux: svn info --show-item wc-root

+0

你的意思是wc-root? 'svn help info'列出了這個選項,它似乎能夠正常工作。 – Adam 2017-03-14 21:01:39

+0

是的,這就是我的意思。我會更新迴應。 – 2017-03-15 11:39:35

相關問題