Программный статус Git - PullRequest
11 голосов
/ 01 марта 2009

Кто-нибудь знает о мерзавце сантехника (определенно не фарфор), способ определения:

  • есть изменения в репо с момента последнего коммита, а
  • опережает ли локальный HEAD источник / HEAD

Я пытаюсь определить это программно, отсюда и желание не решать это с помощью фарфора и различных сед-фу.

Ответы [ 2 ]

10 голосов
/ 01 марта 2009

Обновление: как упомянуто ниже от toupeira , вы можете использовать опцию --porcelain git status (начиная с коммита 6f15787, сентябрь 2009 г., git 1.7 +0,0).

Я упомянул в своем ответе " Что означает термин" фарфор "в Git? ", что:

Возможно, значение --porcelain здесь означает «производить продукцию, пригодную для потребления фарфоровыми сценариями»

Однако, это не будет отображать информацию о начале / сзади : см. « Что добавить к« git status --porcelain », чтобы он вел себя как« git status »?": для этого вам все равно придется использовать другие команды: см." Как узнать, есть ли в git-репозитории изменения, которые не были синхронизированы с сервером?"


Первоначальный ответ март 2009

В команде фарфора:

$ git diff HEAD

дает вам изменения с момента последнего коммита (что вы будете делать, если запустите "git commit -a").

Возможный эквивалент в сантехнической команде:

$ git ls-files -m

для отображения всех измененных (рабочий каталог или индекс) файлов


Если вы создаете свой репозиторий путем клонирования другого репозитория, удаленная «главная» ветка копируется в локальную ветку с именем «origin». Вы получаете свою собственную "главную" ветку, которая не привязана к удаленному хранилищу.

Всегда есть текущая голова, известная как ГОЛОВА. (На самом деле это символическая ссылка .git / HEAD на файл типа refs /head / master.)

запустить "git status" и проанализировать вывод:

# On branch master
# Your branch is ahead of 'origin/master' by 11 commits.
#

Подробнее в вопросе SO " Почему Git говорит мне" Ваша ветка опережает "origin / master" на 11 коммитов. "И как мне ее остановить? "

Возможный эквивалент в сантехнической команде:

* git-for-each-ref

для перечисления всех коммитов, но также требует анализа вывода ...

Опять же, git ls-файлы могут использоваться для получения того же результата, что и состояние git .

git ls-files --exclude-per-directory=.gitignore --exclude-from=.git/info/exclude \
                    --others \
                    --modified \
                    -t
2 голосов
/ 08 июля 2013

git status теперь имеет аргумент --porcelain для сценариев (а также альтернативу -z для синтаксического анализа машины), предпочтительнее git ls-files, который не показывает файлы, добавленные в индекс.

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