Git подталкивает к не-голому репо, сохраняет текущее рабочее дерево

Как я могу перенести в не-пустой репозиторий git, автоматически добавить и зафиксировать любые изменения в рабочем дереве, а затем повторно извлечь текущую ветку, чтобы отразить изменения от этого толчка?

Я думал о чем-то вроде этого:

Добавьте крючок на пульте (репозиторий non-bare) для запуска git add . && git commit -m "Automated commit" && git reset --hard

Есть ли недостатки этого метода? Есть ли другой способ сделать это?


(Отказ от ответственности: я знаю, что это не самая идеальная ситуация, но это то, что мы имеем в моей компании, и я хочу сделать ее максимально упорядоченной, не требуя, чтобы все полностью изменили то, как они работают)

Спасибо!

1 ответ

Решение

После возни я нашел довольно хорошее решение.

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

#!/bin/sh
cd ../
unset GIT_DIR
CHANGED=$(git diff-index --name-only HEAD --)
if [ -n "$CHANGED" ]; then
    git add -u .
    git commit -m "Automated commit"
    echo "There were uncommitted changes in the working directory...please pull them and push your changes again"
    exit 1
fi 

Хук после получения: принудительно извлекает текущую ветку, поэтому изменения будут показаны в рабочем каталоге. Это перезапишет любые изменения в рабочем каталоге, но они уже были добавлены / зафиксированы / объединены хуком предварительного получения.

#!/bin/sh
cd ../
unset GIT_DIR
branch=$(git branch | sed -n -e 's/^\* \(.*\)/\1/p')

git checkout -f $branch


echo "Update pushed to branch $branch and checked out in the website directory" 
Другие вопросы по тегам