Как я могу увидеть все файлы, которые были изменены / добавлены / удалены за последнее полученное нажатие? - PullRequest
2 голосов
/ 11 марта 2012

Команда git show --pretty="format:" --name-status bd61ad98 покажет список всех файлов, которые были изменены / добавлены / удалены в последнем коммите, где bd61ad98 - это идентификатор коммита. Вывод выглядит так:

[trusktr@rocketship express.git]$ git show --pretty="format:" --name-status bd61ad98

A       test.txt
D       test3.txt
M       wp-atom.php

Как насчет команды, которая показывает ту же информацию, но для всех коммитов с последнего нажатия? Например, если файл был удален (D), затем повторно добавлен (A), а затем изменен (M), идеальный статус будет M для измененного. Другими словами, чистый эффект заключается в том, что файл был изменен.

Есть ли такая команда? Даже если бы команда перечисляла дубликаты статусов для файлов, это было бы хорошо. Я мог бы написать скрипт, который может определить чистый эффект.

Возможно, есть способ сравнить различия и вывести список файлов, которые были изменены / удалены / добавлены?

Причина, по которой мне нужен такой файл, заключается в том, что я делаю скрипт, который будет обновлять другое местоположение с использованием FTP на основе этой информации.

Ответы [ 2 ]

3 голосов
/ 11 марта 2012

Вы действительно хотите git diff-tree;см. мой другой ответ на ваш другой вопрос тоже.: -)

Изменить для деталей:

git diff-tree -r [other options] commit1 [commit2]

даст вам изменения (в форматах, задокументированных для git-diff-tree), сделанные либо между commit1 и (я думаю) его немедленнымparent (если commit2 опущен) или между commit1 и commit2.

Вы также можете присвоить ему фактический идентификатор дерева, но затем вы должны присвоить ему оба идентификатора дерева, так как он не сможет найти родителя,Например:

git diff-tree -r 69d8f48dd3e69f228b9a727cc69f8fbaf4534b4f
error: Object 69d8f48dd3e69f228b9a727cc69f8fbaf4534b4f is a tree, not a commit

(очевидно, идентификатор будет отличаться).

Если у вас есть имя филиала, которое ссылается на «то, что мы отправили в последний раз», например, ветвь THEYHAVE, ивы хотите отправить им то, что находится на ветке TESTED, вы можете сделать:

git diff-tree -r THEYHAVE TESTED |
    while read omode nmode ohash nhash letter pathname; do
        ...
    done

и использовать различные буквенные коды и значения в $nhash и так далее для извлечения файлов ("git cat-file"-p $ nhash "даст вам содержимое файла даже в --bare репо).

(Вы можете упростить это с помощью --name-status для вашего случая, вероятно.)

После того, как у вас есть все, что нужно для FTP, туда, куда оно должно идти, вы можете использовать git update-ref, чтобы переместить метку ветки THEYHAVE в любую точку.ветвь с именем TESTED names (возможно, было бы неплохо один раз использовать git rev-parse, чтобы получить идентификатор этой ветки «впереди», на случай, если она перемещается, пока вы выполняете всю эту работу).

0 голосов
/ 11 марта 2012

Я не знаю точный формат diff, но вот что вы можете сделать в вашем скрипте:

  • git fetch Примечание: не тяните, а извлекайте.
  • Сделайте diff между <branch> и <remote>/<branch> в нужном вам формате и сохраните результаты или выполните необходимое действие.
  • Слияние <remote>/<branch> в <branch>

Таким образом, вы можете выполнять действия на отдельных push es.

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