如果我们做的东西只是在本地供自己用的话,就不需要跟网络打交道,也不需要远程仓库这样的东西了。
但是如果我们是在一个项目组中,或者做的东西想跟别人分享呢,我们就必须学习一下怎么使用远程仓库。
远程仓库的概念,其实在网络的某台服务器上,也有着一个Git仓库,跟我们本地的其实是一模一样的,对于服务器的管理员来说,其实也是一个本地的Git仓库。
像GitHub,和现在CSDN和OSChina的Code等,都为我们提供了这样的空间供我们存放自己的项目,在项目组内部也可以利用GitLab自己搭建一个Git服务器,来作为项目的远程仓库使用。
我学习Git,就是从Git clone这个命令开始的,才发现去拉取开源项目的代码回来看,是可以如此方便的。
我在CSDN上面放了一个Android项目,它的Git地址如下:
https://code.csdn.net/foolsheep/todo.git
那么我可以利用git clone命令将其下载到对应的目录中来。
linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace $ ls -al 总用量 28 drwx------+ 1 Administrators None 0 六月 19 23:15 . drwx------+ 1 SYSTEM SYSTEM 0 六月 18 16:17 ..
linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace $ git clone https://code.csdn.net/foolsheep/todo.git Cloning into 'todo'... remote: Counting objects: 183, done. remote: Compressing objects: 100% (119/119), done. remote: Total 183 (delta 49), reused 179 (delta 49) Receiving objects: 100% (183/183), 1.40 MiB | 323 KiB/s, done. Resolving deltas: 100% (49/49), done.
linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace $ ls -al 总用量 32 drwx------+ 1 Administrators None 0 六月 19 23:16 . drwx------+ 1 SYSTEM SYSTEM 0 六月 18 16:17 .. drwxr-xr-x+ 1 linmiansheng None 0 六月 19 23:16 todo linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace $ cd todo linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace/todo $ ls -al 总用量 54 drwxr-xr-x+ 1 linmiansheng None 0 六月 19 23:16 . drwx------+ 1 Administrators None 0 六月 19 23:16 .. drwxr-xr-x+ 1 linmiansheng None 0 六月 19 23:16 .git -rw-r--r-- 1 linmiansheng None 333 六月 19 23:16 .gitignore drwxr-xr-x+ 1 linmiansheng None 0 六月 19 23:16 .settings -rw-r--r-- 1 linmiansheng None 2041 六月 19 23:16 AndroidManifest.xml -rw-r--r-- 1 linmiansheng None 21422 六月 19 23:16 ic_launcher-web.png drwxr-xr-x+ 1 linmiansheng None 0 六月 19 23:16 libs -rw-r--r-- 1 linmiansheng None 781 六月 19 23:16 proguard-project.txt -rw-r--r-- 1 linmiansheng None 664 六月 19 23:16 project.properties -rw-r--r-- 1 linmiansheng None 10 六月 19 23:16 README.md drwxr-xr-x+ 1 linmiansheng None 0 六月 19 23:16 res drwxr-xr-x+ 1 linmiansheng None 0 六月 19 23:16 src
linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace/todo $ git remote origin
linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace/todo $ git remote -v origin https://code.csdn.net/foolsheep/todo.git (fetch) origin https://code.csdn.net/foolsheep/todo.git (push)
如果要添加一个新的远程仓库,可以使用 git remote add <项目名> <远程仓库地址>,
linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace/todo $ git remote add volley https://github.com/adamrocker/volley.git linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace/todo $ git remote -v origin https://code.csdn.net/foolsheep/todo.git (fetch) origin https://code.csdn.net/foolsheep/todo.git (push) volley https://github.com/adamrocker/volley.git (fetch) volley https://github.com/adamrocker/volley.git (push)
接下来,我们可以利用git fetch 命令来从远程仓库中抓取数据,如下:
linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace/todo $ git fetch volley warning: no common commits remote: Reusing existing pack: 1469, done. Receiving objects: 2% (30/1469), 324.00 KiB | 7 KiB/s
这样,我们就将远程仓库的数据抓取到我们本地了。
需要记住一点,fetch命令只是将远程仓库的数据抓取到我们本地,它并不会将数据自动地整合到我们的分支上。
这个分支,太慢了,还是把它删了。
在Git中,可以利用git remote rm将远程仓库给删除掉,不过在此之前,我们先学习一下rename,也就是改变远程仓库在本地的项目名称。
刚才是volley,现在我们可以将其改成volley_slow,如下:
linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace/todo $ git remote rename volley volley_slow linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace/todo $ git remote -v origin https://code.csdn.net/foolsheep/todo.git (fetch) origin https://code.csdn.net/foolsheep/todo.git (push) volley_slow https://github.com/adamrocker/volley.git (fetch) volley_slow https://github.com/adamrocker/volley.git (push)
好了,现在我们可以把它给删掉了。
linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace/todo $ git remote rm volley_slow linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace/todo $ git remote -v origin https://code.csdn.net/foolsheep/todo.git (fetch) origin https://code.csdn.net/foolsheep/todo.git (push)
接下来,我们重新添加一个远程仓库吧,然后直接抓取数据:
linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace/todo $ git fetch lmswxdev Username for 'https://code.csdn.net': Password for 'https://sheepjtgjfc@163.com@code.csdn.net': warning: no common commits remote: Counting objects: 1598, done. remote: Compressing objects: 100% (1045/1045), done. remote: Total 1598 (delta 551), reused 1384 (delta 431) Receiving objects: 100% (1598/1598), 7.95 MiB | 296 KiB/s, done. Resolving deltas: 100% (551/551), done. From https://code.csdn.net/foolsheep/lmswxdev * [new branch] dev -> lmswxdev/dev * [new branch] master -> lmswxdev/master
还是同样一句话,要记得,此时只是抓取数据下来,我们并没有将抓来的数据整合到我们的当前分支中。
在这里,又发现了,git clone 也实现这个操作啊,它把数据都抓取下来了。
远程仓库的分支叫做远程分支,通过branch命令,我们可以看到当前项目下的各分支:
linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace/todo $ git branch * master linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace/todo $ git branch -r lmswxdev/dev lmswxdev/master origin/HEAD -> origin/master origin/master
指定-r(remote)参数的,显示的则是远程分支。
可以发现远程分支都是以 <仓库名>/<分支名> 在本地显示出来的。
抓取下来之后,就可以把远程分支也当做本地分支来看待,所不同的,你没有办法将你的改变推送到远程仓库,如果没有权限的话。
如果我们拥有权限的话,我们可以利用push命令,将在本地的提交(commit)给推送到远程仓库上,
linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace/todo $ git push origin master Username for 'https://code.csdn.net': Password for 'https://code.csdn.net': fatal: Authentication failed
push的语法如下:
git push <远程仓库名> <远程分支名>
git push <远程仓库名> <本地分支名>:<远程分支名>
git push origin dev:master
git push origin master:master
此如果“:”存在,本地分支号为空的话,如下:
git push origin :master
我们还可以利用show命令,来查看本地配置上,远程仓库的信息,如下:
linmiansheng@linmiansheng-PC /cygdrive/f/test_workspace/todo $ git remote show origin * remote origin Fetch URL: https://code.csdn.net/foolsheep/todo.git Push URL: https://code.csdn.net/foolsheep/todo.git HEAD branch: master Remote branch: master tracked Local branch configured for 'git pull': master merges with remote master Local ref configured for 'git push': master pushes to master (up to date)
原文地址:http://blog.csdn.net/linmiansheng/article/details/32403883