2009-08-28 51 views
6

这可能是一个有关约定,最佳实践和/或个人喜好的问题:使用git权利(私人回购网站代码)?

所以我一个git的noob,我的网站代码是不值得分享,所以我没有使用的github等。

了解git不需要中央存储库我认为:很好,我的工作站和服务器是两个节点,我只需将更改从我的工作站推送到服务器。

当我开始,代码只有在服务器上,所以我:

  1. 在服务器:git init
  2. 在工作站:git clone [email protected]:path/to/repo
  3. 欢天喜地所做的更改,并在本地
  4. 致力于在工作站:git push [email protected]:path/to/repo

我得到了奇怪的结果。我在文件中添加了本地出现在服务器上,但对现有文件的更改没有反映出来。

然后我读取警告,反对推送到检出的远程分支。因此,新的设置是:

  1. git clone --bare,使纯仓库
  2. 把纯仓库我的服务器上(~/repos/mysite.git - 不是公共文件夹)
  3. 代码本地和:git push [email protected]:repos/mysite.git
  4. 在服务器:git pull ~/repos/mysite.git得到最新的

这是正确?它合乎逻辑吗?你会做什么?

回答

4

您的新安装设置服务器存储库的正确方法。

。参阅临Git的Getting Git on a Server章节以获取更多信息。

+1

呃专门为我正在做的一个章节。在问更多的git问题之前,我会阅读Pro Git ... – EMiller 2009-08-28 16:29:17

+0

这是一个很好的阅读。玩的开心 :) – spatz 2009-08-28 16:30:17

5

不管你选择做什么,你可能都想使用git hooks自动化一下。钩子是一组脚本,git将在某些事件上执行。这里相关的是更新后的钩子(在服务器的仓库中)。在一个正常的回购,钩子在.git/hooks,所以在裸回购,他们在hooks。该目录可能当前包含大量示例钩子脚本(在最新版本中命名为*.sample)。您需要创建一个名为post-update的服务器,其中包含在服务器推入后您想要执行的任何操作(例如,cd到另一个服务器并执行拉动操作)。

至于你的解决方案的细节......你没有推入检出分支做正确的事情。您正在做的唯一可能的问题是服务器最终只有用于检出文件的存储库的额外副本。如果你决定你不喜欢的磁盘空间这种浪费,我敢肯定,这会做你想要什么:

git --work-tree=/path/to/checkout-dir --bare reset --hard 

这告诉git的复位到正常状态,利用给定的路径作为工作目录,但请记住该存储库实际上是裸露的。我以前没有亲自做过这种事情,但它似乎在我的小测试中工作!

注意:如果您决定要推入检出分支(只有在服务器上的回购将不会用于任何操作,而只是推送并检出文件的副本)。 。如果你完全确定这一点,你可以在服务器的gitconfig中将receive.denyCurrentBranch设置为false,在服务器上执行git reset --hard,强制其工作目录进入它应该处于的状态。

2

阅读“为什么不“git push”之后,我看到远程回购的更改了吗?“在GitFaq(在Git Wiki上)。