6

我正处于让 Git 和 Gitolite 工作的最后阶段。这是目前的情况:

在此处输入图像描述

4

2 回答 2

5

Gitolite 管理下的存储库没有工作副本。所以你要做的是创建另一个带有工作副本的存储库,提交数据并将它们推送到 gitolite 管理的存储库。最简单的方法是直接在服务器上执行此操作。因此,在每个www目录下,执行:

cd /home/X/www
git init
git remote add origin /home/gitolite/repositories/X.git
git add .
git commit
git push origin

现在您在存储库中拥有了数据,这很容易。我假设同一个用户帐户可以访问 gitolite 存储库和服务器数据(正如您在聊天中所说),这使问题变得更加容易。

现在存储库没有备用存储库,因此您有两个数据副本。要删除它们,对每个站点执行以下操作可能是最简单的:

cd /home/X
git clone -s /home/gitolite/repositories/X.git www.new
mv www www.old
mv www.new www
rm -r www.old

-s克隆选项确保/home/X/www/.git存储库不会从中复制数据/home/gitolite/repositories/X.git)。最后你必须安装一个钩子。这个问题已经解释过了,但你的情况稍微容易一些。由于数据存在于同一台服务器和同一用户下,您可以简单地在所有 gitolite 存储库中安装一个更新后挂钩,其中仅包含:

#!/bin/sh
cd /home/X/www
git pull

如果您想将存储库和 Web 服务器移动到单独的服务器(我建议这样做,因为 Web 服务器,如果它面向外,应该位于“非军事区”中,而 git 服务器最好在您的内部另一条防火墙后面的网络),您当然需要在另一个问题中描述的 ssh 触发器。

于 2011-08-15T13:10:06.770 回答
1

我有点理解你在说什么,所以如果我不在基地,请发表评论,但你需要将你创建git clone仓库转移到你的机器上,然后你可以将目录复制.git到你的工作目录中. 这应该保留遥控器。

这个过程应该是这样的:

git clone gitolite:a.git
# Message about copying an empty repo
cp -R a/.git/ /your/home/directory/a

复制后,您应该.gitignore在必要时进行设置并添加/提交它,然后执行 a和git add .类似的操作,它将填充空的 repo。git commit -m "initial commit"git push origin master

于 2011-08-15T00:41:33.550 回答