2011-01-26 13 views
1

對Java使用命令行git。我們的項目有大量的嵌套包,這當然意味着大量的嵌套目錄。使用Java進行命令行版本控制 - 處理大量嵌套數字對象

在命令行上鍵入這些目錄正在成爲PITA,對於某些非日常操作(如「git rm」)來說似乎不可避免。特別是當我在Eclipse中移動東西時,需要在命令行中進行追趕,但文件不再存在(不能使用shell擴展或*)。此外,外殼擴展不會考慮忽略的文件,並將忽略的文件發送到git命令會導致該命令中止(正確)。出於此問題範圍之外的原因,對IDE集成不感興趣。

任何人都想讓這個更容易嗎?

我在win7/powershell,但我打開使用bash或批處理的建議。

+0

不知道從我的頭頂上。但是如何爲最常用的位置創建環境變量? – 2011-01-26 18:28:29

+0

dir結構太深,地點太多 – 2011-01-26 18:43:40

+0

我必須承認我不太瞭解這個問題 - 如果你刪除了一個目錄,並且需要將它同步到git中,你可以執行「git add -A topdir」它會遞歸的從索引中刪除它。事實上,你可以做「git add -A」。它會使索引與你的工作目錄同步...是不是有足夠的選擇性? – araqnid 2011-01-26 19:19:59

回答

1

我不知道git add -A - 在使用了幾天後,我沒有太多的路徑挫折感。將回報。

1

不熟悉win7/powershell。假設你的類名是唯一的,在bash,那麼你可以找到

find . -name SomeFile.java 

然後,你可以「混帳RM」他們

git rm $(find . -name SomeFile.java) 

當然,如果你不想鍵入「查找文件。-name「,你可以在你的.bashrc中創建一個函數來簡化它。 PowerShell支持類似的東西嗎?如果沒有,那麼看看cygwin,它可以讓你運行bash?

EDITED

如果你的類名稱不是唯一的,這種做法是行不通的這麼好。

1

我以前沒有用過git,但是我用的是Perforce。我假設你需要引用一些目錄,出於某種原因你不能使用通配符。然後在PowerShell中,你可以使用像這樣的結構:

## Find all directories named "test*" 
dir * -inc test* -r | ? {$_.PSIsContainer} | % {git <some command> $_.FullName} 

## Find all files and directories named "test*.*" 
dir * -inc test*.* -r | % {git <some command> $_.FullName} 

你也可以編寫一個包裝函數來使這更容易。這是讓你開始的東西。

Function git { 
    param(
     [Parameter(Position = 0, Mandatory = $true)] 
     [String]$Command 
     , 
     [Alias("PSPath")] 
     [Parameter(Position = 1, ValueFromPipelineByPropertyName = $true)] 
     [String[]]$Path 
    ) 

    process { 
     if ($Path) { 
      $Path | {git.exe $Command $_} 
     } else { 
      git.exe $Command 
     } 
    } 
} 
0

如果你想避免在所有路徑打字,你可以使用TortoiseGit,並通過圖形用戶界面做管理。

我也喜歡使用命令行,但是在某些情況下(例如,一次恢復20個文件),我發現在恢復對話框中檢查文件比較容易,只需單擊「確定」即可。對我而言,TortoiseGit不是Git控制檯的替代品,而是它的一個非常方便的擴展。

不幸的是,您提到的用例(一次刪除多個文件)不能用TortoiseGit來實現。如果我不得不立即刪除一堆文件,我會要求git告訴我哪些文件當前版本化(git ls-files),將該列表編入文件,編輯它,然後爲編輯中剩下的每個文件執行git rm文件。

0

你試過git前端git gui?它通常帶有git,對於快速處理一堆文件非常有幫助。

0

你試過EGit?這不是你見過的最壯觀的git UI,但如果你已經使用eclipse,它會讓一些事情變得更容易。在Eclipse中看到小圖標也很好,它顯示哪些文件已經更改,哪些沒有更改。