2010-10-13 53 views
15

以下問題的文件正在變得越來越普遍:查找不加入顛覆

  • 有幾個開發商在一個項目上,其中包括新的文件(通常爲圖片)
  • 大家都說,一切都在檢查和工作我們凍結髮展。 。Unbeknownst對我們來說,就是那些沒有在檢查圖像,因爲它們是新的用戶不會注意到丟失的文件,而不是簽出,所以SVN看起來很好
  • 的代碼被編譯和部署(抱歉,沒有QA團隊)
  • 第二天,客戶告訴我們將缺少的圖片
  • 的CTO閱讀我們暴動行爲

注:圖像路徑都在代碼和數據庫,所以它不容易獲取所有使用的圖像的完整列表。

我希望是寫給大家部署之前運行一個小的C#程序。我想知道項目目錄中的哪些文件(或者它的一個subdir.s,遞歸地)沒有被添加到subversion中。理想情況下,我還想排除積極添加到忽略列表中的項目。

我們正在使用TortoiseSVN與Windows主機和客戶端。

如何以編程發現無添加的文件?

到目前爲止我能找到的最接近的東西是this說使用svn status | grep -e ^?,但這看起來像一個Unix命令。

+4

不是一個答案,但是當我通過龜承諾,我總是有「顯示未版本控制文件「複選框。這會顯示目錄中尚未添加的每個文件,並提醒我檢查它們。一次您可以忽略要忽略的東西(.suo,.user,ReSharper文件等),並且它將防止這種情況使用diff數據,只留下真正的未簽入文件。 – 2010-10-13 19:02:46

+5

這聽起來像是一個人的問題給我。 「每個人都說所有東西都被檢入」是不夠的,下一個打破構建的人應該支付10美元(爲團隊存錢)。創建一個工具來檢查另一個工具是否正確使用聽起來很錯誤。 – 2010-10-13 19:04:58

+4

無論我們多努力嘗試,至少有時候我們會打破構建。 (努力工作,我們永遠不會破壞它是浪費時間)。這是個好問題,因爲根據我的經驗,#1簽入錯誤缺少新文件。 – doug65536 2012-12-20 05:01:01

回答

6

您可以使用SharpSvn對於這一點,並寫類似:

SvnClient client = GetClient(); 

client.Status(workingCopyPath, (o, e) => 
{ 
    if(e.LocalContentStatus == SvnStatus.NotVersioned) 
    { 
     Console.WriteLine("Not versioned: " + e.FullPath); 
    } 
}); 

編輯:這也將尊重您的忽略文件和svn:ignore屬性。

+0

感謝您的提示。這個庫看起來可能正是我需要的。由於缺乏文檔或例子,我無法弄清楚如何使用它,但我會繼續玩弄它。 – Dinah 2010-10-13 19:30:30

13
svn status | grep -e ^? 

它的Unix命令,但我敢肯定,比如果你執行從龜犯,你都能夠看到問號新文件,是不屬於SVN控制下的文件

+1

在Tortoise中搜索帶問號文件不是該問題的程序化解決方案。 – 2010-10-13 19:01:41

+1

我只是想表明,在不同的地方可能會出現問題... – Ency 2010-10-13 19:05:12

+0

不管怎樣,發現這個有幫助! – Rob 2013-04-03 10:26:57

1

你可以它的輸入端安裝CollabNet Subversion Command-Line Client,然後運行它svn命令作爲一個子進程,管到你的程序,並尋找有?作爲他們的第一個字符線(指示未知/未檢查到顛覆,而不是忽略)。您可以使用CollabNet的命令行客戶端以及TortoiseSVN。

這是同樣的事情,svn status | grep -e ^?做,但它不依賴於Unix工具。

或者,你可以只安裝Cygwin,並具有全方位的Unix工具在您的處置。

7

的代碼被編譯和部署 (抱歉,沒有QA團隊)

這不是真正的問題在這裏?如果您將未經測試的代碼發送給客戶,那麼發現任何問題的第一人當然是客戶。也許(除了解決這個特定問題之外)你需要做的是在編譯過程中添加至少一些基本的自動化(或手動)功能測試,有時在代碼編譯和切換到客戶端之間。

+1

我當然不能在這裏與你爭論,但我在這件事上的權力是非常有限的。 – Dinah 2010-10-13 19:07:40

+1

您的開發人員在沒有測試時正在受苦。測試讓你免於觸摸事物的恐懼。 – doug65536 2012-12-20 05:05:30

8

此問題被標記爲tortoisesvn,所以我假設您的團隊正在使用TortoiseSVN作爲客戶端。正如@Joe Enos建議的那樣,TortoiseSVN顯示與svn:ignore中的條目不匹配的未版本控制的文件。我想知道是否添加其他工具可能會有所幫助,因爲團隊應該已經在使用TortoiseSVN檢查未版本化的文件。

否則,一個C#程序似乎有點矯枉過正,用於在SVN工作目錄中查找未受版本控制的文件。建議使用@Josh Kelley,您可以使用命令行SVN客戶端(例如CollabNet或Slik SVN)和grep

您還可以使用在Windows命令行中可用的findstr命令:

svn status | findstr "^?" 
+0

findstr技巧非常棒!感謝你,我現在有一個批處理文件,可以告訴我在某些修訂之間添加或刪除的每個文件。 'svn diff -r REVNO:HEAD --summarize | findstr「^ A」> AddedFiles.txt' 'svn diff -r REVNO:HEAD --summarize | findstr「^ D」> DeletedFiles.txt' 只需將REVNO和HEAD更改爲您喜歡的範圍即可。也感謝這頁:http://muffinresearch.co.uk/archives/2008/09/15/svn-tip-get-list-of-files-changed-between-revisions/ – 2012-07-04 11:20:25

+0

我跑這個命令什麼也沒有顯示svn status | findstr「^?」 – HaBo 2016-04-06 11:07:18

0

你也可以改變一個設置,這將顯示有新添加的文件夾進行修改。

設置 - >圖標Overlays->顯示疊加未版本控制項目

右鍵單擊文件夾,然後導航TortoiseSVN的 - 設置。點擊'圖標疊加'。在右側的檢查 - 「版本的文件,標誌着父文件夾的修改」

這適用於Windows7的,沒試過與其它OS