2011-04-22 106 views

回答

2

這是一個黑客位,但你可以做到這一點

git diff banch --name-status | grep -v this/path 

不完全混帳,但做這項工作

0

你可以你不關心的路徑添加到您的.gitignore文件。

編輯:您可以使用git diff files/you/care/about看你感興趣的diff文件

例如,如果git status表明一堆文件被更改:

modified: foo/bar 
modified: foo/baz 
modified: some/more/stuff 
modified: and/some/more 

可以使用git diff foo只查看foo目錄中的更改或git diff some/more/stuff and/some/more查看除foo之外的所有內容。

如果您想查看幾個文件的差異,這將會很好,但如果您想要查看除之外的所有文件(如一個或兩個文件),則效果不佳。我不認爲有辦法告訴git diff使用否定您指定的文件。

另一種方法是使用git add --interactive,但是對於你正在做的事情可能有點麻煩。

它也證明,.gitignore不會忽略已經在版本控制下的文件,所以這個想法永遠不會工作。忘記我提到它。 :(

+0

我只是試圖忽略可能與diff命令不同的某些文件。 – 2011-04-22 02:02:13

1

正如他們說的〜在這裏:。Exclude a directory from git diff,你可以使用這樣的事情:

git diff --name-only $branch_name | grep -v -E "$excluding" | xargs git diff $branch_name -- 

...其中branch_name是其他分支和excluding是你想排除的格局我不知道混帳二ff最終會提供一個類似的參數,並且我在git文檔中沒有找到這樣的選項,所以這個命令就是我現在使用的。

唯一需要注意的是,你必須在你的工作目錄的頂層(即包含您的git的文件夾相同的文件夾),此命令的工作,因爲你的路徑中傳遞給git diff --最後通過xargs與此相關。

您可以製作一個腳本,在您喜歡的外殼中爲您完成工作,例如

#!/bin/zsh 

if [[ $# < 2 ]] ; then 
    echo "Usage: \n gdx [git-diff-params] branch_name extended_reg_exp\n" 
    echo "\nExamples:\n gdx development jpg \n gdx --name-only master origin/master jar \n gdx development '[a-zA-Z]+'" 
    exit 1 
fi 

excluding="[email protected][-1]" 
branch_name="[email protected][-2]" 
diff_options="[email protected][1,-3]" 

## Get a list of all the paths to include 
git_paths=$(git diff --name-only $branch_name | grep -v -E "$excluding") 

if [[ ${#git_paths} = 0 ]] ; then 
    #no diffs 
    exit 0 
else 
    ## Escape special characters 
    git_paths=(${(f)git_paths}) 
    for i in {1..${#git_paths}} 
    do 
     git_path=$git_paths[i] 
     git_path=\"${git_path//\"/\"}\" 
     git_paths[i]=$git_path 
    done 

    ## Run the diff 
    eval "git diff ${=diff_options} $branch_name -- $git_paths" 
fi 

這需要參數和打印用法和whatnot。我這樣使用它:

gdx HEAD^ "*.jar"