2012-06-18 3 views
1

У меня есть голое репо, и я отредактировал файлы напрямую, не делая команду git commit -a -m, потому что я спешил, можно ли обновить git, чтобы узнать изменения, которые я сделал? Потому что, когда я делаю git status на голом репо я получаю:Обновление файлов с открытым репо до git

fatal: This operation must be run in a work tree 

EDIT: Это то, что я могу сделать для голого репо:

#!/bin/bash 
NAME=$1 

mkdir git/$1 
cd git/$1 
git init --bare 
echo "git clone /root/git/$1 /tmp/git/$1" >> hooks/post-receive 
echo "cp -rp /tmp/git/$1/* /var/www/$1" >> hooks/post-receive 
echo "rm -rf /tmp/git/$1" >> hooks/post-receive 

Так что я был прав непосредственно файлы в каталоге /var/www/$1/.

+0

Что вы получаете от git-stash? Я был пойман в этой ловушке раньше, но в итоге снова клонировал из другого места. –

+7

Какие файлы вы редактировали напрямую? У голого репо нет рабочей копии. –

+0

Я обновил вопрос, пожалуйста, повторно закройте вопрос. – Michelle

ответ

0

Ну, я полагаю, вы могли бы сделать, по существу, обратное тому, что делает это post-receive крюк (непроверенные):

git clone /root/git/<repo> /tmp/<tmprepo> 
cp -rp /var/www/* /tmp/<tmprepo> 
cd /tmp/<tmprepo> 
git checkout <branch_to_put_cruft_on> 
git commit -a -m "collecting misc edits from web tree" 
git push origin <branch_to_put_cruft_on> 
cd - 
rm -rf /tmp/<tmprepo> 

Если есть дополнительные файлы в /var/www вне вещи из репо, то cp уловы более чем необходимо, но git commit -a должен игнорировать файлы, которые в настоящее время не отслеживаются.

Возможно, вы также можете выполнить это с помощью git s --git-dir и --work-tree вариантов, и это может дать более чистое решение, но я не играл с ними широко. Что-то вдоль этих линий (также непроверенных, YMMV, бла, бла ...):

git clone /root/git/<repo> /tmp/<tmprepo> 
cd /tmp/<tmprepo> 
git checkout <somebranch> 
git --git-dir=/tmp/<tmprepo>/.git --work-tree=/var/www commit -a -m "collect edits" 
git push origin <somebranch> 
cd - 
rm -rf /tmp/<tmprepo> 

Чтобы быть еще более осторожным, а не делать git commit -a, использовать --git-dir и --work-tree варианты с соответствующей серии git add с и сделайте правильную фиксацию.

Смежные вопросы