Git分支作为存储库

时间:2015-06-08 05:31:00

标签: git

我使用git来管理latex中的出版物,因此我的项目本质上非常简单。我正在使用一个服务,我有一个免费的存储库,因此我想使用What's the best practice for putting multiple projects in a git repository?的解决方案2,但我不知道如何创建分支。

我是否只是结帐主人,然后再使用

git push origin myProject

有人可以发布完整的工作流程,在分支机构中创建两个独立的存储库吗?

1 个答案:

答案 0 :(得分:2)

当您从git init开始时,您将获得并清空存储库,并为您设置默认的master分支。

之后,您可以使用git branch <branch-name>创建新分支,然后使用git checkout <branch-name>切换到该分支。执行此操作的简短方法是git checkout -b <branch-name>,其中-b表示分支是新的,应该创建。

每个存储库中每个分支的内容可能完全不同。您链接的两个解决方案的工作方式类似,更改了用于更改您正在处理的项目的过程。

假设您链接的第二种方法(多个repos推送到不同分支上的单个遥控器):

  1. 为遥控器上应存在的每个“项目”创建存储库。

    $ cd /to/the/location/of/projects/project-1
    $ git init .
    $ git remote add origin <url to remote repo>
    $ git push -u origin master:project-1
    

    现在/to/the/location/of/projects/project-1目录内是一个空的git repo,默认设置了分支master。最后一个命令将本地repo的master分支推送到远程repo的project-1分支(并使用-u跟踪它)。 注意:使用此第一个推送命令在远程仓库上创建project-1分支。

  2. 为第二个项目创建另一个回购。

    $ cd /to/the/location/of/projects/project-2
    $ git init .
    $ git remote add origin <url to remote repo>
    $ git push -u origin master:project-2
    

    现在第二个项目设置为另一个本地仓库,但是被推送到与第一个仓库相同的仓库,尽管在另一个分支内。 -u标志使远程master分支中的本地project-2分支跟踪发生变化。

  3. 远程存储库(已添加为origin到每个本地存储库)具有三个分支:master(如果远程软件为您执行此操作,则会自动创建), project-1project-2project-1从第一个项目的本地仓库接收更新。 project-2从您拥有的第二个本地仓库接收更新。

    现在,当您在第一个本地仓库内工作并进行更改时,您可以使用

    将它们更新到远程
    # Inside `project-1` directory repo
    $ git commit -am "Commiting changes in project 1."
    $ git push origin master:project-1
    

    与第二个本地回购相似

    # Inside `project-2` directory repo
    $ git commit -am "Commiting changes in project 2."
    $ git push origin master:project-2
    

    这种方法在以下方面很好:

    • 您的不同项目实际上是分隔到不同的本地存储库,这使得以后可以根据需要轻松拆分到真正不同的遥控器。

    缺点是:

    • 如果你不小心,你可能会偶尔犯一些错误,例如:将本地project-1主服务器推送到远程project-2分支,依此类推。你可以创建易于记忆的别名或其他东西来对抗这种情况。

    如果您不希望为每个本地存储库使用默认的master分支,则可以使用

    创建和签出匹配的分支名称。
    # Inside the `project-1` dir locally.
    $ git checkout -b project-1
    $ git push -u origin project-1:project-1 # the ':project-1' part might be redundant here.
    
    ...
    
    # Inside the `project-2` dir locally.
    $ git checkout -b project-2
    $ git push -u origin project-2:project-2 # the ':project-2' part might be redundant here.
    

    底线:小心你正在处理的分支。在进行更改和提交之前,请务必检查正确的一个。务必将右分支推到正确的远程分支。务必记录哪个分支包含哪些项目内容。

    关于克隆:

    如果您或其他人克隆了远程存储库(其中包含每个不同项目的远程分支),则默认情况下,他们会将整套项目分支克隆到其开发环境中。这不是世界末日,但是克隆回购中的工作流最初(几乎)反映了您在问题中链接的解决方案1:1个本地存储与不同分支上的所有项目。

    要仅克隆单个分支(在您的情况下为项目),您可以使用

    $ git clone -b project-x --single-branch <remote-url>
    

    编辑:

    要将远程存储库中的更改同步到本地项目,应避免使用git pull,因为它会自动进行可能会产生冲突的提取和合并。

    考虑到你在两个本​​地回购,其中master分支用于开发,远程分支project-1project-2位于远程仓库中:

    # Update project 1 from remote inside the project-1 repo dir.
    $ git fetch origin # fetch changes from origin
    $ git merge origin/project-1 master # merge remote project-1 branch to local master branch