多人协作时,每个人都在自己本地有一个Git仓库,这时会希望有一个远程官方仓库来同步代码。
创建远程仓库
创建一个远程仓库,和创建本地仓库没什么区别。如果站在远程服务器的角度来说,就是创建一个服务器本地仓库。
创建仓库的方法有两个,一是通过初始化命令,从无到有新建;二是通过克隆命令,从别的仓库克隆一份过来。
一般来说,对于只用来做代码同步的仓库,我们不需要它有自己的工作区,因为我们不会在服务器上直接开发。
所以比较好的办法是使用初始化命令,再配合bare
参数,创建一个不带工作区的纯版本库。
// 在远程服务器上,进入需要放置版本库的目录,执行命令
git init --bare
关联本地仓库
克隆
如果你本地还没建立仓库,或者你只是想得到一份和远程一模一样的仓库,可以直接克隆远程的到你本地。
git clone 远程仓库地址 本地仓库地址
注意指定的远程仓库地址必须要存在,但是本地仓库地址可以不存在,如果不存在就会创建,但如果指定的本地仓库地址已经有Git在管理了,这次克隆命令就会失败。
它会提示你
fatal: destination path '本地仓库地址' already exists and is not an empty directory.
对于克隆得到的本地仓库,它会自动把克隆源作为远程仓库,自动关联上。
这时候,如果你在本地仓库进行了某些提交,然后想把这些提交同步到远程仓库,就可以使用push
命令。
// 在本地进行工作,比如新建了文件
touch a.txt
git add --all
git commit --m "A"
// 然后,直接push到远程
git push
假如在你工作的这段时候内,都没有其它小伙伴做过push操作,那么这时候就可以直接push成功。
指定远程仓库
如果你已有一个本地仓库了,也可以使用remote
命令手动为其指定远程仓库。
而且一个本地仓库可以关联多个远程仓库。
// 列出所有远程仓库
git remote
// 添加一个远程仓库关联,并起个名字
git remote add 起的名字 远程仓库地址
// 删除一个远程仓库引用
git remote remove 仓库名
通过remote命令添加了远程仓库后,并不能像clone那样直接可以做push操作,假如你这么做了,Git会告诉你:
fatal: The current branch master has no upstream branch.
To push the current branch and set the remote as upstream, use
git push --set-upstream origin master
这时你有两个选择,一是在push
命令后增加参数,告诉Git你要把当前的提交push到哪里;二是设置默认的远程仓库分支,这样你以后的push操作默认都推到设置的远程仓库分支里。
// 把当前分支的提交push到origin仓库的master分支
git push origin master
// 或者
// 设置默认远程仓库分支
git push --set-upstream origin master
// 以后再push就不需要参数
git push
合并远程数据
当远程仓库有更新时,就可以把远程的提交合入本地仓库:
// git merge 远程仓库名/分支名
git merge origin/master
然而这个命令并不会去下载远程仓库的数据,它完全是个本地操作。所以在执行merge之前,需要先下载远程仓库的提交数据:
// 先用fetch下载,git fetch 远程仓库名 分支名
git fetch origin master
// 再合并
git merge origin/master
那有没有方便点的命令把这两步操作一起做了?有,就是pull
:
git pull
pull
命令等同于fetch + merge
。
推送本地数据到远程仓库
把本地的提交推送到远程仓库,只用一个命令,就是push
:
git push
push要想顺利执行,需要满足一个条件:本地仓库已包含远程仓库的所有提交,或者说,远程仓库没有比本地仓库更多更新的提交。
在满足这个条件下,可以顺利执行push操作,让远程仓库合并我们的本地提交。
所以,在push之前,都需要先进行pull操作,如果在pull的合并过程中发生冲突,还需要在本地解决完冲突后,再把解决后的提交push到远程仓库。
版本标签
Git能给某次提交打上标签,这个作用很大,比如可以为某次发行版打个版本号标签:
// 在当前分支指针上,打上一个叫3.2的标签
git tag 3.2
标签不会自动同步到远程仓库,此时可以手动推送:
git push --tag
这样就把本地打的发行版标签推送到远程仓库。
网友评论