Выполнение git коммитов из скрипта - PullRequest
0 голосов
/ 04 апреля 2019

Я хочу зафиксировать какой-либо файл из скрипта на принадлежащем мне git-сервере, и это нужно сделать автоматически.

Мой скрипт (который находится в ~/bin) делает что-то вроде

rsync -arE --delete --files-from=~/files.list / ~/repo
git --git-dir ~/repo/.git add ~/repo/*
git --git-dir ~/repo/.git commit -m "automatic commit #123"
git --git-dir ~/repo/.git push

Я хочу скопировать файлы, перечисленные в файле ~/files.list в ~/repo (это обрабатывает rsync), а затем добавить эти файлы в репозиторий, зафиксировать и отправить.

Тем не менее, он не может правильно добавить файлы в коммит git, в частности, он всегда захватывает файлы, которые находятся в рабочем каталоге (в данном случае ~/bin), поэтому мне нужен способ:

  1. изменить текущий каталог для команд git ИЛИ
  2. указать git добавлять файлы из каталога, отличного от рабочего

Ответы [ 2 ]

2 голосов
/ 05 апреля 2019

Не нужно копировать, просто сообщите git, где находятся ваши рабочие файлы.

git -C ~/repo --work-tree="$PWD" add .
git -C ~/repo commit -m etc
git -C ~/repo push

Поместите список files.list в формат .gitignore, игнорируйте все, кроме файлов, которые вы хотите, чтобы git выследил, ивключите его в репозиторий .git/info/exclude:

# To include only this, and/this, and/that but ignore everything else:
# ignore everything
*
# except
!this
!and/this
!and/that
!etc
# do search inside directories, don't let ignores stop later searches inside
!*/

Примечание: пути в командной строке берутся относительно рабочего дерева, если вы еще не в нем, поэтому если вы находитесь вСделайте репо и хотите добавить контент из другого места, где вы можете git --work-tree=/path/to/elsewhere add ., и он добавит все это.

2 голосов
/ 05 апреля 2019

Похоже, вам нужна опция Git -C, которая изменяет текущий каталог перед запуском. Вы можете написать что-то вроде следующего:

rsync -arE --delete --files-from=~/files.list / ~/repo
git -C ~/repo/ add .
git -C ~/repo/ commit -m "automatic commit #123"
git -C ~/repo/ push

Конечно, вы также можете написать это как cd и подоболочку, но выше может быть немного проще:

rsync -arE --delete --files-from=~/files.list / ~/repo
(cd ~/repo/ &&
 git add .
 git commit -m "automatic commit #123"
 git push)

Я предполагаю, что ваша rsync команда уже делает то, что вы хотите.

...