繁体   English   中英

将裸仓库文件更新为git

[英]Updating bare repo files to git

我有一个裸露的回购协议,因为我在赶时间,所以我不做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/目录中的文件。

好吧,我想您基本上可以执行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选项来完成此操作,这可能会提供更--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 s并进行适当的提交。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM