带有/多工作站和集中式服务器的GIT工作流程

时间:2009-10-21 17:28:01

标签: git

好的,我不太确定的一些事情。

首先:

  • 我在远程DC的VPS上有一个“裸”回购。
  • 我有一个工作站,我也在编码。
  • 我家里有一个工作站,我也在编码。

1 - 当我在我的一个工作站上设置我的初始仓库时(我认为Git称之为主机),我应该检查并使用其他目录吗?像颠覆一样。

2 - 当我想在工作中处理代码时,我很困惑,如何在我的工作桌面上提交LOCAL仓库,然后在一天结束时,将我的更改推送到在我的VPS上“裸露”回购,以便我可以将更新提取到我的家庭桌面。

我尝试使用克隆,但是我在家用桌面上进行的每次推送最终都会将更改推回到远程仓库。

2 个答案:

答案 0 :(得分:4)

1 - master是git的存储库主分支的默认名称。它不是指整个存储库,而是指那一行开发。您不需要单独的工作目录 - 本地git开发的一般概念是在目录中工作,提交对存储库的更改,然后根据需要将它们推送到上游。

2 - 您的家庭和工作回购中应该有一个遥控器指向裸VPS回购。如果您通过克隆VPS仓库创建了仓库,则它将是“原产地”。从原点推送和拉出是默认设置,因此这就是您推送的原因。这是设计行为 - 当您克隆回购时,很有可能是您想要获得更新并将更改推回到的回复。

我建议让家庭和工作都将VPS回购视为原产地。然后,只需使用git pushgit pull,您就可以在必要时在每台计算机上进行推送和拉取。如果您的某个回购信息尚未设置,您可以重新停止VPS回购以自动执行,或使用

git remote add origin <url-of-VPS-repo>
git config branch.master.remote origin
git config branch.master.merge = refs/heads/master

最后两行让git知道您希望主分支与原始远程(您的VPS)上的主分支相关联。

答案 1 :(得分:0)

在Git中,您可以(通常应该)将分支“切换”到位。例如,如果你在分支'master'上,并且想要开始分支'devel',你可以简单地使用

$ git checkout devel

并且您的工作区域将反映分支'devel'。您通常需要处于干净状态,即没有未经修改的更改。


关于“工作”,“家庭”和“裸”存储库之间的设置:

首先,配置。我假设在“工作”和“家庭”计算机上都配置了“裸”(或任何你命名的裸存储库),配置如下所示(你可以使用“git remote add”来创造它):

[remote "bare"]
    url = user@example.com:/path/to/repo.git
    fetch = +refs/heads/*:refs/remotes/bare/*
    push = refs/heads/*:refs/heads/*

可以有其他远程配置,例如关于标签(例如fetch = +refs/tags/*:refs/tags/*等),但为了简单起见,我省略了它。

其次,我们假设您正在处理分支'master',并且您在“work”和“home”存储库中对此类分支进行了以下配置:

[branch "master"]
    remote = bare
    merge = refs/heads/master

您当然可以为其他分支机构提供类似的配置。

现在让我们来看一些示例会话。你要么在“工作”,要么在“家”。

  1. 在开始工作之前,您应该做的第一件事是从“裸”存储库获取更新。我假设你在'主'分支。你可以使用“git pull bare”,或者使用上面的分支配置“git pull”:

    $ git pull bare
    Updating 8818df8..9ad6770
    Fast forward
     foo |    1 +
     1 files changed, 1 insertions(+), 0 deletions(-)
    

    “快进”意味着“裸”存储库在您正在使用的存储库之前(并且您没有任何不在“裸”存储库中的更改)。如果你是从“工作”或“家”工作,而不是同时工作,这应该是你得到的情况。

  2. 现在做一些工作(这只是示例会话):

    $ edit, edit, edit
    $ git commit -a
    $ git add somefile
    $ git commit -a
    $ git commit --amend
    

    请注意,您最好完成工作,以便没有未经修改的更改,但这并不是一项严格的要求。如果你留下一些未经注释的更改,你可以在“git pull”之前完成提交,但是你不会得到快进而是合并。或者您可以使用“git stash”来隐藏您已经发生的更改,然后在拉出后应用存储(取消暂存)。

  3. 完成工作后,将更改推送到“裸”存储库,这样您就可以访问其他存储库中的工作。

    $ git push bare
    Counting objects: 8, done.
    Compressing objects: 100% (3/3), done.
    Writing objects: 100% (6/6), 493 bytes, done.
    Total 6 (delta 0), reused 0 (delta 0)
    Unpacking objects: 100% (6/6), done.
    To user@example.com:/path/to/repo.git
       9ad6770..4230584  master -> master
    
  4. 我希望这样的例子会有所帮助。