些协同工作的特性分支。(请参考上面一节 *默认推送(跟踪分支推送) 的说明。
如果你有个叫 serverfix 的分支需要和他人一起开发,可以运行 git push (远程仓库名) (分支名):
git push origin master # 提取我的master分支 并更新到远程仓库的master分支
git push origin
serverfix # 提取我的serverfix分支 并更新到远程仓库的serverfix分支
git push origin serverfix:remoteserverfix # 提取我的 serverfix分支 并更新到远程仓库的remoteserverfix分支
git push origin :serverfix # 删除远程分支 serverfix(在这里提取空白然后把它变成[远程分支])
1.6.3 标签推送
默认情况下,git push并不会把标签推送到远程仓库,只有通过显式命令才能分享标签到远程仓库。其命令格式如同推送分支,运行 =git push origin [tagname]即可。
git push origin v1.5
如果要一次推送所有(本地新增的)b标签上去,可以使用 --tags 选项:
git push origin --tags
现在,其他人克隆共享仓库或拉取数据同步后,也会看到这些标签。
1.7 场景操作
2.1 概念
2.1.1 取得项目的 Git 仓库
有两种取得 Git 项目仓库的方法。第一种是在现存的目录下,通过导入所有文件来创建新的 Git 仓库。第二种是从已有的 Git 仓库克隆出一个新的镜像仓库来。
从当前目录初始化
要对现有的某个项目开始用 Git 管理,只需到此项目所在的目录,执行:
$ git init 初始化后,在当前目录下会出现一个名为 .git 的目录,所有 Git 需要的数据和资源都存放在这个目录中。不过目前,仅仅是按照既有的结构框架初始化好了里边所有的文件和目录,但我们还没有开始跟踪管理项目中的任何一个文 件。(在第九章我们会详细说明刚才创建的 .git 目录中究竟有哪些文件,以及都起些什么作用。)
如果当前目录下有几个文件想要纳入版本控制,需要先用 git add 命令告诉 Git 开始对这些文件进行跟踪,然后提交:
$ git add *.c $ git add README $ git commit -m 'initial project version' 稍后我们再逐一解释每条命令的意思。不过现在,你已经得到了一个实际维护着若干文件的 Git 仓库。
从现有仓库克隆
如果想对某个开源项目出一份力,可以先把该项目的 Git 仓库复制一份出来,这就需要用到 git clone 命令。如果你熟悉其他的 VCS 比如 Subversion,你可能已经注意到这里使用的是 clone 而不是 checkout 。这是个非常重要的差别,Git 收取的是项目历史的所有数据(每一个文件的每一个版本),服务器上有的数据克隆之后本地也都有了。实际上,即便服务器的磁盘发生故障,用任何一个克隆出来 的客户端都可以重建服务器上的仓库,回到当初克隆时的状态(可能会丢失某些服务器端的挂钩设置,但所有版本的数据仍旧还在,有关细节请参考第四章)。
克隆仓库的命令格式为 git clone [url] 。比如,要克隆 Ruby 语言的 Git 代码仓库 Grit,可以用下面的命令:
$ git clone git://github/schacon/grit.git 这会在当前目录下创建一个名为 “gr
it” 的目录,其中内含一个 .git 的目录,并从同步后的仓库中拉出所有的数据,取出最新版本的文件拷贝。如果进入这个新建的 grit 目录,你会看到项目中的所有文件已经在里边了,准备好后续的开发和使用。如果希望在克隆的时候,自己定义要新建的项目目录名称,可以在上面的命令最后指 定:
$ git clone git://github/schacon/grit.git mygrit 唯一的差别就是,现在新建的目录成了 mygrit,其他的都和上边的一样。
Git 支持许多数据传输协议。之前的例子使用的是 git:// 协议,不过你也可以用 http(s):// 或者 user@server:/path.git 表示的 SSH 传输协议。我们会在后面详细介绍所有这些协议在服务器端该如何配置使用,以及各种方式之间的利弊。
2.2 常用指令
2.2.1 获得git仓库