文章目录

  • push还是clone?
  • push
  • 本地新建一个git库
  • 同远程空库进行关联
  • clone
  • 总结
  • push的方式:
  • clone方式:
  • 综上,还是直接clone的方式好


push还是clone?

关联仓库有两种方式:
① 将本地项目目录转成git本地仓库,再将本地库和远程仓库关联起来,然后将本地项目代码推送到远程,这里称为push的方式;
② 将项目先上传到Git远程仓库,然后本地拉取远程库,达到关联的效果,这里称为clone的方式。

push

GitHub上创建一个完全空的Repository。方法可见Git(三) —— GitHub上新建一个仓库 之后该怎么干呢,其实github已经提示了:

仓库重新关联 git git 关联远程仓库_git关联远程仓库


注意,这是新建一个完全空的仓库才会有的提示,现在,动手吧。

本地新建一个git库

到本地项目目录下,使用git初始化命令:

git init

这里为了模拟,创建一个只有一个文件的文件夹作为项目文件:

仓库重新关联 git git 关联远程仓库_github_02


只有一个文件:

仓库重新关联 git git 关联远程仓库_仓库重新关联 git_03


进行初始化:

仓库重新关联 git git 关联远程仓库_git关联远程仓库_04


这就已经成功地将此文件夹变为了一个git本地库,但是注意,此时文件夹里的所有文件/夹都还是在Working区(回忆一下Git(一)的内容),这可以通过git branch和git status得到验证:

仓库重新关联 git git 关联远程仓库_git拉取一个非空的远程仓库_05


可以看到,git branch -a没有任何内容,git status告诉我们,的确是在master分支下,但是目前没有任何提交(No commits yet),但是工作区有个test.txt文件没有跟踪(untracked files),建议使用git add进行跟踪。

很清晰,那么我们进行跟踪(add)和提交(commit):

仓库重新关联 git git 关联远程仓库_github_06


可以看到,commit完了之后,git branch -a才出现了分支。虽然之前git status提示我们的确是在master分支下。

回顾Git(一) —— Git架构:四个区这提示我们:git status是从Working区获取分支信息,而git branch是从本地库(Repository)而不是Working区或Stage区获取分支信息。刚刚的操作中,在commit后Repository才第一次有内容进来(之前的Repository是空的),进而获取到分支信息。

同远程空库进行关联

先到GitHub的repository下拿到clone路径:

仓库重新关联 git git 关联远程仓库_git关联远程仓库_07

https://github.com/ProLayman09/linkLocalRemote.git

接下来在本地项目目录下使用下面命令

git remote add origin #yourURL

yourURL就是刚才拿到的clone路径,实操:

仓库重新关联 git git 关联远程仓库_git拉取一个非空的远程仓库_08


注意

git remote add origin #yourURL

只是将本地库(Repository)和远程库关联起来,远程库默认名字就是origin,不要修改。而本地分支(此时其实就是一个master)和远程分支之间并没有建立联系,实际上,此时远程库没有任何分支
这一点可以在上述命令执行后,去远程库查看分支信息得到验证。
接下来:

git push -u origin master

注意,这个命令有三个作用:

  • 在远程库(origin)创建一个名为master的新分支
  • 将本地当前分支(master)下的repository区的内容(本例中其实就一个test.txt文件)推送到远程刚创建的master分支下
  • 使用**-u**参数使本地当前分支(master)和远程刚创建的这个分支(master)关联起来,下次本地master分支的再次push和pull时,可以不指定远程分支名称,默认就是master分支

这里再次强调一遍,所有远程仓库的默认名称就是origin,不管创建Repostitory时是什么名称,千万不要自己瞎改。

参考:添加远程库 实操结果:

仓库重新关联 git git 关联远程仓库_仓库重新关联 git_09


去看看远程仓库:

仓库重新关联 git git 关联远程仓库_git关联远程仓库_10


有了test.txt文件。

成功!

clone

直接clone一个不为空的远程仓库又该怎么操作呢?

先在GitHub上创建一个不为空的Repository(带README.MD),并使用Upload功能上传一个文件(当然使用Create new file创建一个新文件也可以):

仓库重新关联 git git 关联远程仓库_git拉取一个非空的远程仓库_11


Upload files的同时选择在远程库创建master分支:

仓库重新关联 git git 关联远程仓库_git关联远程仓库_12


结果:

仓库重新关联 git git 关联远程仓库_git拉取一个非空的远程仓库_13


ps:显示的“1 branch”就是刚刚创建的master分支。在桌面(假设我们就想放在桌面上)进行git clone:

仓库重新关联 git git 关联远程仓库_git拉取一个非空的远程仓库_14


(因为mac下直接在桌面打不开终端,只能迂回:finder——我的电脑(whu)——桌面——双指击——新建位于xxx):

仓库重新关联 git git 关联远程仓库_git_15


看下本地桌面的文件夹:

仓库重新关联 git git 关联远程仓库_仓库重新关联 git_16

仓库重新关联 git git 关联远程仓库_git拉取一个非空的远程仓库_17

搞定!
这里也可以看到,首次使用0<—1的方式从远程库拉取时,将自动拉取远程master分支的内容作为本地分支内容,并且命名为master。

且经实测(此处为后来实验的,就不上图了),0<—1方式同样git clone操作之后自动将两个master关联起来,在之后的操作中,可以不指明名称地push/pull

所以0<—1的方法很简单:新建远程仓库——upload files——本地在想要的路径下直接git clone。

总结

push的方式:

其实就是github新建空repository的提示:

仓库重新关联 git git 关联远程仓库_git关联远程仓库

  • 远程新建一个完全空的repository
  • 本地git init:将一个文件夹初始化为git本地库
  • git addgit commit将文件夹中内容(working区)推送到repository区
  • git remote add origin #yourURL
  • git push -u origin master
clone方式:
  • 选好想要放的位置
  • 打开终端
  • git clone #yourURL // 拉取
  • git push -u origin master // 关联

综上,还是直接clone的方式好