请选择 进入手机版 | 继续访问电脑版

[LINUX] Linux操作Git长途 仓库与本地仓库同步的教程

[复制链接]
查看118 | 回复8 | 2021-9-4 23:53:59 | 显示全部楼层 |阅读模式

创建本地仓库并同步到长途
git黑白 常强大 的版本管理工具。接下来的时间里,我就和大家絮叨絮叨git的入门:怎样 在本地创建一个git仓库,并把本身 的本地代码同步到长途 。此教程是在mac上操作的,假如 您的体系 是Linux,那么操作方法雷同 ;假如 您的体系 是windows,那么,只必要 把git的bash窗口调出来,以后的过程也都与Linux雷同 。
一、起首 ,您必要 安装git,此步就忽略了,自行安装即可。

二、假设你现在 还没有创建一个工作目次 ,那么,先创建一个目次 吧,就叫StudyGit。

三、现在 的StudyGit目次 还只是一个本地目次 ,和git没有任何关联,那么,我们怎么样才能把这个目次 和git关联起来呢?只必要 进入StudyGit目次 ,运行如下下令 :

复制代码代码如下:
yanyaozhen@macbookpro:~/Coding/Practice/StudyGit$ git init
Initialized empty Git repository in /Users/yanyaozhen/Coding/Practice/StudyGit/.git/

提示已经阐明 我们初始化了一个空的本地git仓库。假如 你查看StudyGit下的全部 文件时,会发现一个.git 的隐蔽 文件,这个文件非常紧张 ,版本的控制就靠它了。同时,假如 你要部署应用程序到生产环境时,牢记 不要把该目次 部署到服务器,由于 这但是 黑客的最爱啊!

四、接下来我们来看一个基本可以说是用的最频仍 的一个下令 :

复制代码代码如下:
yanyaozhen@macbookpro:~/Coding/Practice/StudyGit$ git status

On branch master

Initial commit

nothing to commit (create/copy files and use "git add" to track)
没错,就是"git status"。这个下令 用于查看当前git的状态,比如,上面的例子中,我们刚创建了一个空的git仓库,那么运行该指令时,git会提示我们,当前没有任何东西要提交,同时提示我们,可以创建或者复制文件后利用 “git add”下令 来跟踪文件的变化。

五、现在 让我们来创建一个文件吧。我们创建一个叫“a.txt”的文本文件,并且内容如下:

复制代码代码如下:
yanyaozhen@macbookpro:~/Coding/Practice/StudyGit$ cat a.txt

aaa
这个时间 ,让我们再来运行下git status吧。运行如下:

复制代码代码如下:
yanyaozhen@macbookpro:~/Coding/Practice/StudyGit$ git status

On branch master

Initial commit

Untracked files:
  (use "git add ..." to include in what will be committed)

    a.txt

nothing added to commit but untracked files present (use "git add" to track)
这时会提示我们有一个未追踪的文件,叫a.txt。我们要把这个文件加入到版本控制中,于是,我们运行如下下令 :

复制代码代码如下:
git add a.txt

这个下令 表示把我们指定的a.txt加入到git控制之下。add下令 可以没有参数(在windows下可以没有参数,在mac下必要 指定当前目次 即“.”),假如 没有参数,则表示把目次 下的全部 文件都加入到git仓库中。这个时间 ,我们再运行下“git status”:

复制代码代码如下:
yanyaozhen@macbookpro:~/Coding/Practice/StudyGit$ git status

On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached ..." to unstage)

    new file:   a.txt
提示我们有改变必要 被提交。这个时间 ,a.txt这个文件就存在于所谓的“暂存区”中,暂存区中的文件可以被真正提交到git仓库。有同砚 大概 说,假如 我不想提交这个文件了,那怎么把刚才的文件从暂存区移除呢?实在 答案就在刚才的提示中:
use "git rm --cached ..." to unstage。
那么,我们运行下这个下令 :

复制代码代码如下:
yanyaozhen@macbookpro:~/Coding/Practice/StudyGit$ git rm --cached a.txt

rm 'a.txt'
再运行git status时就可以发现,又回到文件没有被提交时的状态了。

六、当我们的文件已经通过“git add”加入到暂存区后,就可以把文件真正提交到git仓库了。如下:

复制代码代码如下:
yanyaozhen@macbookpro:~/Coding/Practice/StudyGit$ git commit -m "提交a.txt"

*** Please tell me who you are.

Run

  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.

fatal: unable to auto-detect email address (got 'yanyaozhen@macbookpro.(none)')
阿欧,报错了,查看给出的错误缘故起因 ,发现是由于 没有设置email和用户名,以是 git不让我提交。git为什么要逼迫 要求设置了这两个设置 才能提交呢?由于 git必须得知道是谁提交的,假如 连谁提交的都不知道,那还怎么做版本管理啊,是不。以是 我们根据提示设置下:

复制代码代码如下:
yanyaozhen@macbookpro:~/Coding/Practice/StudyGit$ git config --global user.email "youremail@example.com"
yanyaozhen@macbookpro:~/Coding/Practice/StudyGit$ git config --global user.name "yourusername"
yanyaozhen@macbookpro:~/Coding/Practice/StudyGit$

好了,我们再提交下:

复制代码代码如下:
yanyaozhen@macbookpro:~/Coding/Practice/StudyGit$ git commit -m "提交a.txt"

[master (root-commit) dab07d0] 提交a.txt
 1 file changed, 1 insertion(+)
 create mode 100644 a.txt
发现已经可以提交成功了,提示一个文件被修改(就是我们的a.txt),一行被插入(就是我们唯一的一行“aaa”)。
我们再运行下git status:

复制代码代码如下:
yanyaozhen@macbookpro:~/Coding/Practice/StudyGit$ git status

On branch master
nothing to commit, working directory clean
提示我们当前没有东西要提交,当前工作目次 是干净的,由于 我们都提交到git了。
好了,到这步后,git就可以完全跟踪已经被提交的文件了,以后,这个文件的任何修改,它都可以记录下来。比如某个人对项目私自 修改了一些东西,项目管理者根据git的版本记录是肯定 可以找到是谁修改了哪些文件的。
现在 我们就可以把文件提交到长途 服务器了。

七、当我们要提交git仓库中的内容到长途 服务器时,我们必须得先成为长途 服务器受信托 的用户才行(服务器当然不答应 全部 人都可以推送内容,那样就乱套了)。这个时间 ,我们必要 先在本地天生 一个公钥,然后把公钥放到长途 服务器的账户列表中。天生 公钥的下令 如下:

复制代码代码如下:
ssh-keygen -t rsa -C "youremail@example.com"

假如 你是windows用户,那么公钥天生 的目次 是C:\Users\用户名.ssh下,内里 有两个文件 id_rsa 和 id_rsa.pub ,此中 id_rsa.pub中的内容就是我们必要 的公钥。假如 你是Linux或者mac用户,那么在用户主目次 下也会有一个.ssh目次 ,内里 放着的是私钥和公钥。假设我们现在 要把github作为长途 推送服务器地址,那么,我们起首 把公钥放在github的settings->SSH keys列表中(点击新建一个ssh key,title随意,把公钥的全部内容复制举行 保存即可)。

八、现在 我们可以给StudyGit项目在github上添加一个长途 仓库了。在github上add new repository,名字我在这里也用StudyGit了(起其他名字也可以),建好后表现 如下:

201655115019409.png (1674×452)

可以看到有一个ssh地址是git@github.com:onlyanyz/StudyGit.git,这个就是我们的长途 git仓库地址了,一会我们就会把文件推送到这里。
接下来,我们必要 把本地git仓库关联到长途 git仓库,操作如下:进入本地StudyGit根目次 ,实验 如下下令 :

复制代码代码如下:
git remote add origin git@github.com:onlyanyz/StudyGit.git

这个下令 的意思是,我给长途 仓库(就是git@github.com:onlyanyz/StudyGit.git)起了个别名,叫origin(实在 叫别的名字也可以,你只要知道这是别名就行,以后就用别名来操作长途 库)。操作后,我们可以利用 “git remote”下令 来查看当前本地仓库关联了哪些长途 仓库(它会列出每个长途 库的简短名字。假如 您之前会利用 git clone下令 的话,在克隆完某个项目后,至少可以看到一个名为 origin 的长途 库,Git默认利用 这个名字来标识你所克隆的原始仓库)。

九、关联了长途 仓库之后,我们就可以推送了。将本地仓库push到长途 仓库的下令 如下:

复制代码代码如下:
git push origin master

下令 表明 如下:
git push的语法为:git push <长途 主机名> <本地分支名>:<长途 分支名>
该语法表示把本地分支名push到长途 主机名的长途 分支。我们可以看到刚才实验 的语句并没有长途 分支名(被省略了),假如 省略长途 分支名,则表示将本地分支推送到与之存在”追踪关系”的长途 分支(通常两者同名),假如 该长途 分支不存在,则会被新建。以是 刚才实验 的语句的意思是,把本地的master分支推送到长途 主机的master分支。
关于git push下令 以后还必要 注意 的地方:
a.假如 省略本地分支名,则表示删除指定的长途 分支,由于 这等同于推送一个空的本地分支到长途 分支。比方 :

复制代码代码如下:
$ git push origin :master

该下令 等同于如下指令:$ git push origin --delete master,表示删除长途 主机的master分支。
b.git push 偶尔 候本地分支和长途 分支名都可以省略,偶尔 候连主机名也可以省略,这个现在 就不细说了。
c.假如 当前分支与多个主机存在追踪关系,则可以利用 -u选项指定一个默认主机,如许 后面就可以不加任何参数利用 git push:

复制代码代码如下:
$ git push -u origin master

好了,现在 我们已经把StudyGit目次 中的内容都推送到长途 了,现在 运行git status看下:

复制代码代码如下:
~/Coding/Practice/StudyGit$ git status

On branch master
nothing to commit, working directory clean
工作目次 还是干净的,接下来您就可以继续在本地举行 创建文件->提交到暂存区->提交到本地仓库->push到长途 仓库的过程啦!

将长途 仓库克隆到本地
下面我们来讲一个新的玩法,就是先有长途 仓库,后有本地仓库,即把长途 仓库“克隆(clone)”到本地。
假设现在 你的团队其他成员已经在git上建好了仓库,并且也push过代码,这个长途 git仓库还叫“StudyGit”,有两个文件:a.txt和README.md,现在 ,您也要开始贡献代码了,那么,您起首 必要 把团队其他成员提交的全部 东西都拉取到你的本地目次 ,这个时间 就会用到“clone”下令 了:

复制代码代码如下:
git clone git@github.com:onlyanyz/StudyGit.git

只要实验 这句指令,就可以把长途 仓库的全部 东西都拉取到本地工作目次 了,当然天生 的本地目次 名和长途 仓库名字是一样的。
假如 您现在 查看下当前本地git仓库的状态,如下:

复制代码代码如下:
yanyaozhen@macbookpro:~/Coding/StudyGit$ git status

On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
下令 回显表示,我的本地分支已经更新为最新的长途 master分支了。此后,我们就可以按照“git快速入门之一”这篇文章所述举行 添加代码并提交了。
现在 ,让我们再看下刚才clone到本地的git项目,现在 有两个文件,如下:

复制代码代码如下:
yanyaozhen@macbookpro:~/Coding/StudyGit$ ll

total 16
-rw-r--r--  1 yanyaozhen  staff    21B 11 19 00:04 README.md
-rw-r--r--  1 yanyaozhen  staff     4B 11 19 00:04 a.txt
接下来,假如A同砚 在github上的这个仓库中又新增了一个文件b.txt,那现在 github长途 仓库中就有三个文件(注意 ,现在 本地仓库中的文件就已经与长途 仓库不同了)。
接下来,我们在本地继续我们的开辟 工作,假如新建了一个文件“c.txt”,现在 ,让我们来把"c.txt"文件加入暂存区,然后commit到本地仓库,这时,我们想把刚才的工作成果再push到长途 ,实验 如下:

复制代码代码如下:
yanyaozhen@macbookpro:~/Coding/StudyGit$ git push origin master

To git@github.com:onlyanyz/StudyGit.git
 ! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'git@github.com:onlyanyz/StudyGit.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
阿欧,报错了,懂点英文的同砚 可以从提示信息看出题目 地点 ,由于 我们的长途 已经有更新了,我们在push到长途 的时间 ,必须先把长途 的改动拉到本地合并起来,才能再次提交我的修改。以是 ,以下的下令 就出场了:

复制代码代码如下:
$ git fetch origin master

该指令意思是从长途 origin仓库的master主分支更新最新的版本到origin/master分支上。
然后我们比对下当前本地master分支和origin/master分支的区别:

复制代码代码如下:
$ git log -p master..origin/master

实验 的回显结果 会详细 列出这两个分支的差异。
然后,我们必要 把origin/master分支上的内容合并到本地master分支:

复制代码代码如下:
git merge origin/master

实验 该指令后,大概 会要求输入合并的来由 ,填写后,我们就合并成功了。这个时间 ,我们就可以再次push了:

复制代码代码如下:
yanyaozhen@macbookpro:~/Coding/StudyGit$ git push origin master

Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (5/5), 543 bytes | 0 bytes/s, done.
Total 5 (delta 2), reused 0 (delta 0)
To git@github.com:onlyanyz/StudyGit.git
   6b3662f..6036a05  master -> master
表示push成功,现在 你可以去github上看到我们在本地新建的b.txt文件啦!
后记:有同砚 大概 查了网上的资料,说“git fetch”和“git merge”指令可以合二为一,叫“git pull”,在此猛烈 建议大家利用 分开的指令,由于 “git pull”会直接合并,而不会等你确认,假如 一旦合并错了,还是比较贫苦 的。宁愿 慢一点,也别重头再来。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

avatar 郭光庆 | 2021-9-12 19:27:13 | 显示全部楼层
admin楼主人气很旺!
回复

使用道具 举报

avatar 流动532 | 2021-9-13 03:54:01 | 显示全部楼层
谢谢admin楼主的分享!
回复

使用道具 举报

avatar hknuhp852859 | 2021-9-18 00:54:00 | 显示全部楼层
哥回复的不是帖子,是寂寞!
回复

使用道具 举报

avatar 123457875 | 2021-9-26 19:53:48 | 显示全部楼层
admin楼主的帖子越来越有深度了!
回复

使用道具 举报

avatar 普通人物怨 | 2021-10-1 06:53:10 | 显示全部楼层
顶一个!
回复

使用道具 举报

avatar 白度了一生一x | 2021-10-16 00:59:50 | 显示全部楼层
楼上长在线啊?
回复

使用道具 举报

avatar 胡37 | 6 天前 | 显示全部楼层
今天是个特别的日子,值得纪念!
回复

使用道具 举报

很给力!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则