git diff branch --name-status --ignore - PullRequest
2 голосов
/ 22 апреля 2011

Есть ли способ игнорировать пути при выполнении git diff?

типа git diff branch --name-status --ignore = this / path

Ответы [ 3 ]

2 голосов
/ 22 апреля 2011

Это что-то вроде хака, но вы могли бы сделать это.

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

Не совсем мерзавец, но выполняет свою работу.

1 голос
/ 18 октября 2011

Как они говорят здесь: Исключить каталог из git diff , вы можете использовать что-то вроде этого:

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

... где branch_name - другая ветвь иexcluding - это шаблон, который вы хотите исключить.Я не уверен, что git-diff в конечном итоге предоставит параметр для чего-то подобного, и я не нашел такой опции в документации 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="$@[-1]"
branch_name="$@[-2]"
diff_options="$@[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

Это принимает аргументы и печатает использование и еще много чего.Я использую это так:

gdx HEAD^ "*.jar"
0 голосов
/ 22 апреля 2011

Вы можете добавить пути, которые вас не интересуют, в ваш файл .gitignore.

РЕДАКТИРОВАТЬ: Вы можете использовать git diff files/you/care/about, чтобы увидеть интересующие вас различия.

ДляНапример, если 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, но это, вероятно, немного громоздко для того, что выdo.

Также оказывается, что .gitignore не игнорирует файлы, которые уже находятся под контролем версий, поэтому эта идея никогда не сработала.Забудь, что я упомянул об этом.(

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...