之前的操作我们只是把Git当做了一个仓库,做本地的一个版本管理,这对Git来说简直大材小用。Git作为分布式版本控制系统,分布才是其特色,如何分布呢?肯定要有一台机器充当原始的版本库,其他的机器“克隆”这个原始版本库,其实每台机器上的版本都一样,没有主次之分,之所以有原始版本库,是为了方便多人协作时候有一个基准,让各机器上的版本保持一致。一般情况下,原始的版本库不会跟我们工作的电脑在一起,它对于我们来说是远程的,所以我们可以称之为远程仓库。
既然是远程,肯定还需要一台机器充当服务器(原始版本库),而且这台机器需要保证24小时开机,这样才能保证其他用户可以随时克隆原始版本,推送提交到该服务器,拉取别人的提交。我们目前只是为了学习Git,特意找个服务器划不来,好在大Git地位超然,很多网站纷纷提供Git仓库托管服务,像是国内外都著名的github.com,国内著名的git.oschina.net。虽然两者都能够提供托管服务,但是github免费建立的只有公仓(对所有用户都可见),私仓(仅对自己可见)是要付费的,而oschina的公私仓都不需要付费,而且是国货,理应支持,因此小编就选择了oschina建立远程仓库。
关于在oschina申请账号这里就不再复述了,假定你已经拥有了账号并登录,那么我们就可以建立一个远程仓库了。在oschina上创建一个远程仓库很简单,我们点击新建项目,我们必须要填写的只有项目名,其他的可以根据你的需要进行选择,有一点需要提示的是,如果你已经有git项目想要直接推送到远程仓库,不要让远程仓库初始化,也就是不要勾选“使用Readme文件初始化这个项目”,如果你不想让别人看见你这个项目,勾选“私有项目”。
我们成功了建立了一个空的远程仓库,里面什么都没有,于是乎给了我们友情提示,告诉我们应该怎么做。
虽然他们真的很用心,但是并没有面面俱到,没关系,就由小编来补充他们的一些不足吧。不同的两台电脑之间需要进行数据传输,肯定需要桥梁,oschina为我们提供了两种选择,一种是HTTPS,一种是SSH。如果使用HTTPS,倒是不用做什么特别的事情,上述教程足以让你把本地项目成功推送到远程仓库,但是每次推送都需要输入账号和密码(oschina的账号密码),十分麻烦,因此我们可以选择另一种方式,SSH。
使用SSH就需要创建SSH Keys,很多人不知道如何创建,没关系,oschina想到了这点,特意给除了教程。
Linux的跟着教程走就行,下面我们来看下windows的。我们使用Git Bash终端,然后同样输入
ssh-keygen -t rsa -C "[email protected]"
git remote add osc-git [email protected]:XXXXXXX/git.git
git remote //只输出远程仓库名称
git remote -v //输出远程仓库名和地址
git remote rm osc-git
git push <远程仓库名> <本地分支名>:<远程分支名>
例如我们将本地的master分支推送到远程仓库的master分支就可以这些书写
git push osc-git master:master
git push osc-git master
其中master代表的是本地分支,这样同样能够达到推送本地master分支到远程master分支的效果。
git push -u osc-git master
The authenticity of host 'git.oschina.net (xxx.xxx.xxx.xxx)' can't be established.
ECDSA key fingerprint is SHA256:xxxxxxxxx.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'git.oschina.net,xxx.xxx.xxx.xxx' (ECDSA) to the list of known hosts.
git clone [email protected]:xxxxxxxx/git.git
有一点需要注意的是,使用git clone拉取的是带有项目名称的文件夹,例如上述操作拉取的就是git文件夹,并非直接拉取项目下的文件和文件夹,因此选择本地仓库位置的时候需要注意。
git fetch osc-git master
git merge osc-git/master
git fetch用于获取远程仓库的分支内容到本地,git merge则用于合并远程分支内容到本地分支,此时远程分支就和本地分支同步了。
git pull osc-git master
git pull是git fetch和git merge两个命令的合体状态,只需要一个命令就能完成上述两步操作,如果在git push的使用-u绑定了一个分支,例如git push -u osc-git master,此时连后面的osc-git master都可以省略,我们只需要git pull就能拉取远程仓库osc-git的master分支,当然该写法只能拉取默认关联的分支,上述例子中就只能拉取osc-git的master分支。