Вы действительно хотите 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
, чтобы получить идентификатор этой ветки «впереди», на случай, если она перемещается, пока вы выполняете всю эту работу).