我正处于让Git和Gitolite工作的最后阶段。这是目前的情况:
答案 0 :(得分: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
中的数据。最后你必须安装一个钩子。它已在this question中解释过,但您的情况稍微容易一些。由于数据存在于同一服务器上且位于同一用户下,因此您只需在包含以下内容的所有gitolite存储库中安装更新后挂钩:
#!/bin/sh
cd /home/X/www
git pull
如果您想将存储库和Web服务器移动到单独的服务器(我建议使用它,因为Web服务器,如果它面向外,应该在“非军事区”,而git服务器更好在你的另一个防火墙后面的内部网络中,你当然需要在另一个问题中描述的ssh触发器。
答案 1 :(得分:1)
我有点理解你在说什么,所以如果我没有基础,请发表评论,但你需要git clone
你创建的空回购转到您的计算机,然后您可以将.git
目录复制到您的工作目录中。这应该保留遥控器。
这个过程应该是这样的:
git clone gitolite:a.git
# Message about copying an empty repo
cp -R a/.git/ /your/home/directory/a
复制后,您应该根据需要设置.gitignore
并添加/提交,然后执行git add .
等git commit -m "initial commit"
然后git push origin master
之类的操作将填充空仓库。