1

私は裸のリポジトリを持っていて、git commit -a -m急いでいたのでコマンドを実行せずにファイルを直接編集しました、私が行った変更を知るためにgitを更新することは可能ですか?git status裸のレポでaを実行すると、次のようになります。

fatal: This operation must be run in a work tree

編集:これは私が裸のリポジトリに対して行うことです:

#!/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/だから私がしたことは、ディレクトリのファイルを直接編集することでした。

4

1 に答える 1

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 adds とともに使用し、適切なコミットを実行します。

于 2012-10-17T14:00:56.720 に答える