Git创建一个共享的仓库; 用户共享仓库

这一节将要讨论的命令:

  • git init –bare

  • git clone

  • git remote

  • git pull

  • git push

场景: 远程仓库示例

让我们建立我们自己的小 “远程” 仓库中,然后共享它. (仓库是 “远程” 只是相对而言)

在这些例子中, 由于仓库是存在于用户的主目录,它们都在同一块磁盘上,所以对于其它使用这些仓库的用户来说,仓库并不是真的“很远”’ ,只是一种对Git来说统一的概念. 但是Git工作流程和命令是相同的, 不管用户和仓库是否在同一磁盘上相隔几毫米, 或在位于世界各地的远程网络上.

创建共享仓库

我们将创建一个仓库,用户为 gitadmin. 这个 gitadmin的仓库将作为公共的仓库,项目中的所有人不仅仅会发布他们自己的工作,而且还会收取他人的工作.

使用场景:

  • gitadmin 将创建一个仓库.

  • 其他用户, 像Amy和Zack就会获取 (“git clone) 的副本,当然一切皆源自 gitadmin的远程仓库.

  • 所有的修改将被拉回和推送到 gitadmin的仓库中.

创建共享的仓库 “裸的”

如果你正在创建一个私人使用的项目或者是之前你不愿分享的日子里创建的仓库, 你只需要输入:

gitadmin $ git init project1 Initialized empty Git repository in /home/gitadmin/project1/.git/

然而, 如果你正在创建用于分享的git仓库,比如需要使用 git clone/pull/fetch/push, 使用 bare 参数加到 git init:

gitadmin $ git init --bare project1.git Initialized empty Git repository in /home/gitadmin/project1.git/

如果你想知道为什么, 请参阅 共享仓库应该是裸仓库.

裸仓库结尾为 “.git”

你可能已经注意到 bare 仓库的结尾是 .git. 这只是依照惯例, 裸git仓库应以以.git结尾. 例如, project1.git 或 usplash.git, 等等. 这个 .git 结尾的目录告诉了他人此git仓库是裸的.

Amy准备添加内容到远程仓库中

在我们的示例中, 因为Amy的名字以字母表中的第一个字母开头, 她可以第一个在仓库中工作.

Amy克隆了这个仓库:

amy$ git clone file:///home/gitadmin/project1.git Initialized empty Git repository in /home/amy/project1/.git/ warning: You appear to have cloned an empty repository.

Git只是告诉我们Amy刚刚克隆的仓库是空的.

我们现在可以开始创建文件和发布 (“git push“) 它们到共享仓库中.

Amy想要看看刚刚获取/克隆的仓库中是否有其它分支:

amy$ cd project1 amy$ git branch amy$

输出为空, git branch 命令显示新创建的仓库中 没有 分支.

Amy创建她的第一个文件,并提交的新的文件到仓库中.

amy$ echo The beginnings of project1 > amy.file amy$ git add . amy$ git commit -m"Amy's initial commit" [master (root-commit) 01d7520] Amy's initial commit  1 files changed, 1 insertions(+), 0 deletions(-)  create mode 100644 amy.file amy$ git branch * master

这个克隆的, 裸的仓库中没有任何分支, 甚至没有 master 代码库中. 当Amy第一次执行 git commit, 这个 master 分支在Amy的本地仓库中被创建了.

Amy试图将她本地仓库发布到远程仓库中:

amy$ git push No refs in common and none specified; doing nothing. Perhaps you should specify a branch such as 'master'. fatal: The remote end hung up unexpectedly error: failed to push some refs to 'file:///home/gitadmin/project1.git'

哎呀, 这不起作用. 上述情况发生在全新的, 完全为空的, 没有分支的仓库中 (即刚刚执行完 git init –bare …).

Amy的本地仓库创建了 master branch, 但共享仓库,由 gitadmin 创建的,却仍然没有任何分支.

Amy将接受git的建议,告诉git她想要推到哪个远程仓库的分支中. 她必须指定远程仓库中的名字和分支名字.

分支和仓库中的名称是什么? Amy最近已经转移了注意力,她忘记了远程仓库的名字, 因此,她会使用 git remote 命令列出她的远程仓库的名称:

amy$ git remote origin

上面显示她只有一个远程仓库,名为 origin. 默认的远程仓库会有一个名字,当你执行 git clone 时,这个名字叫做 origin, 所以上面的输出并不令人惊讶.

同样, Amy可以找出本地仓库中使用的分支名,即 git branch 命令:

amy$ git branch * master

分支名为 master 也不令人惊讶, 因为 master 是git的默认分支名称.

在得知远程仓库名称 (origin) 和本地分支名称 (master) 后,Amy现在可以推送 (发布) 所做的更改了.

这个 git push 语法是:
git push [remote-repository-name] [branch-or-commit-name].
Amy将推送名为 master 推送到远程仓库 origin:

amy$ git push origin master Counting objects: 3, done. Writing objects: 100% (3/3), 245 bytes, done. Total 3 (delta 0), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. To file:///home/gitadmin/project1.git  * [new branch]      master -> master

上述报告的最后一行显示 new branch 被创建了: 这个 master branch (指向一些地方,作为 “源”) 在本地仓库,它被映射到另一个 master branch (指向一些地方,作为 “目的地”) ,远程仓库中.

Amy将不再需要输入 git push origin master, 而只需要输入 git push, 因为 master 分支现在已经存在于远程仓库 origin:

amy$ git push Everything up-to-date

Zack也想加入

现在该轮到Zack来操作仓库了. 他也克隆一次:

zack$ git clone file:///home/gitadmin/project1.git Initialized empty Git repository in /home/zack/project1/.git/ remote: Counting objects: 3, done. 远程: Total 3 (delta 0), reused 0 (delta 0) Receiving objects: 100% (3/3), done. zack$ ls amy.file

从上面可以看到, Amy添加的文件, amy.file 也从共享仓库中被拷到了Zack的工作目录中.

Zack也添加一个文件并将其推送到共享仓库中:

zack$ cd project1 zack$ echo I am zack > zack.file zack$ git add . zack$ git commit -m 'zack initial commit' [master 05affb3] zack initial commit  1 files changed, 1 insertions(+), 0 deletions(-)  create mode 100644 zack.file zack$ git push Counting objects: 4, done. Delta compression using up to 2 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 283 bytes, done. Total 3 (delta 0), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. To file:///home/gitadmin/project1.git    01d7520..05affb3  master -> master

请注意,Zack没必要做执行 git push origin master 来创建位于远程仓库中的 master 分支, 因为Amy已经创建了远程仓库上的 master 分支.

Amy想要得到最新的版本

amy$ git pull 远程: Counting objects: 4, done. 远程: Compressing objects: 100% (2/2), done. 远程: Total 3 (delta 0), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. From file:///home/gitadmin/project1    01d7520..05affb3  master     -> origin/master Updating 01d7520..05affb3 Fast-forward  zack.file |    1 +  1 files changed, 1 insertions(+), 0 deletions(-)  create mode 100644 zack.file amy$ ls amy.file zack.file

一切都工作的很好: Amy和Zack正在很好地共享着代码: 他们正在奉献 (“git push“) 以及索取 (“git pull“) 共享仓库.

以上总结了如何操作共享, 远程仓库. 但除此以外,远程仓库还有更多有意思的地方.

本文转载自:http://www.gitguys.com/topics/creating-a-shared-repository-users-sharing-the-repository/?lang=zh

版权及转载说明

本站原创、转载文章欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区

本站转载文章版权归原作者所有,如发现本站文章涉嫌侵权请点击「联系我们」反馈,本站将立即给予删除

转载请注明:文章转载自:全分享社区 「http://www.aweb.cc

本文标题:Git创建一个共享的仓库; 用户共享仓库

本文地址:http://www.aweb.cc/article/detail/id/428.html

Git分支管理策略 <<上一篇 下一篇>>在服务器上的部署 Git_自动同步数据到