1

我有一个裸仓库,我直接编辑了文件而没有执行git commit -a -m命令,因为我很着急,是否可以更新 git 以了解我所做的更改?因为当我git status在裸回购上做一个时,我得到一个:

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如果在 repo 中的内容之外还有其他文件,则cp捕获的内容超出了必要的范围,但git commit -a应该忽略当前未跟踪的文件。

您可能也可以使用gits--git-dir--work-treeoptions 来完成此操作,这可能会提供更简洁的解决方案,但我没有广泛使用这些解决方案。这些方面的东西(也未经测试,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-dirand--work-tree选项与适当的git adds 系列一起使用并进行正确的提交。

于 2012-10-17T14:00:56.720 回答