当前位置:   article > 正文

Git与Github的使用_github git

github git

目录

1. Git是什么

2. 集中式和分布式版本控制系统的区别

3. 在Windows10上安装Git

4. 创建本地仓库(repository)

4.1 新建仓库

4.2 把修改的文件添加到版本库

4.3 版本查询和跳转

4.4 几个重要的概念

4.5 撤销修改

4.6 删除文件

5. 远程仓库(免费的Git服务端)


1. Git是什么

Git是世界上最先进的分布式版本控制系统。对于开发者来说,主要用于代码托管和代码版本控制。

2. 集中式和分布式版本控制系统的区别

略,可参考廖雪峰的博客:https://www.liaoxuefeng.com/。

3. 在Windows10上安装Git

Git软件下载地址:Git - Downloads

下载速度比较快的国内开源资源下载链接地址:

https://npm.taobao.org/mirrors/git-for-windows/

下载安装包后进行安装,使用默认的安装选项进行即可。安装完成之后,打开Git Bash,界面如下:

第一次使用Git,需要设置两项用户身份信息,分别是用户名和Email,以命令行的方式来进行设置,如下:

$ git config --global user.name "xxxx"
$ git config --global user.email "xxxxxxx"

Git是分布式版本控制系统,所以,每个机器都必须自报家门。这里的git config命令使用了--global参数,表示在这台电脑上的所有的Git仓库都会使用这个配置。

Git Bash 的命令用法跟 Linux 完全一样,比如 cd、 ls 、mkdir、clear等命令。

注:

 在安装Git的时候,如果使用都是默认的安装路径,那么用户主目录(跟Linux里面的用户主目录是一样的概念)就默认在C盘里面,比如:C:\Users\Administrator。双击Git Bash图标启动Git Bash(每一次启动Git Bash,它的工作目录默认设置在用户主目录下。),在Git Bash里面使用命令pwd进行查看。如下:

在win下,对应的就是这个目录:

Git默认的用户主目录里面,有个文件.gitconfig,可以使用记事本将它打开,发现里面存有上面所设置两项用户身份信息:

不管是本地仓库还是远程仓库(下文会讲到),都需要这两项信息作为认证的依据。

4. 创建本地仓库(repository)

仓库(repository)其实就是一个目录,所以创建仓库,其实就是创建一个目录,可以在任何位置通过Git Bash里面的命令mkdir来进行创建。这是一个比较特殊的目录,是Git的管理目录。目录里面每个文件的修改、删除(凡是有改动的)都能被Git跟踪到,而且也能查询到相应的历史记录。

4.1 新建仓库

在win下的E盘里面,新建一个目录git_learn。通过Git bash的命令行进入到这个目录里面。

在该目录下执行命令:git init之后,这个目录就变成了Git可以管理的仓库。

命令git init执行完毕,可以看到弹出的提示:“在xxxx位置初始化了一个空的仓库”。通过一个命令行就可以把一个仓库给建立起来了,那么这个Git仓库,到底有什么不同的呢?其实,命令执行过后,在当前目录下,还生成了一个新的目录.git,它是一个隐藏的目录。可以使用命令ls -a来查看,如下:

这个目录是Git的核心部分,它是用来管理当前仓库(E:\git_learn,在哪个目录下执行git init,那个目录就是一个仓库)的,不要试图去修改这个目录里面的.git文件,否则就破坏了整个Git仓库。

4.2 把修改的文件添加到版本库

所有的版本控制系统(不只是Git,比如还有SVN等),都只能跟踪文本文件的改动。比如TXT文件、网页、程序代码....,比如在第几行,新增了哪几个单词,在第几行删掉了哪几个单词。但是对于一类比较特殊的文件,二进制文件,比如图片、视频、可执行文件等,也可以由版本控制系统来进行管理,但是没法跟踪文件的变化,只能把二进制文件每一次的改动都串起来。比如,它可以知道图片大小从100KB变成了200KB,但是到底哪里有了更改,控制系统并不知道,因为这是二进制文件。

微软的Word文件、PDF等文件都是二进制文件,所以版本控制系统是没法跟踪Word文件的改动的。

要想真正使用版本控制系统,就应该以纯文本方式来编写文件,文本是有编码的,最好使用UTF-8编码,大部分平台都能支持,兼容性好。

把一个文件添加到Git仓库,那么文件就要建立在仓库里面,或者是仓库里面的子目录,否则Git是找不到文件的。接下来,执行两个步骤即可将新建的文本添加到仓库:

  1. 把文件添加到暂存区,命令:git add filename
  2. 再把文件提交到仓库,命令:git commit -m  “description”

注:

git commit命令使用了一个参数-m,后面是本次提交的说明,一般是输入一些有意义的内容。

可以一次性add很多文件,然后使用commit一次性提交很多文件(git add -A)。

4.3 版本查询和跳转

(1)查看提交历史:git log

这个命令会显示从最近到最远的提交日志,是按照时间来进行排序的。如果嫌弃输出的信息太多,可以加参数--pretty=oneline,那么就会以单行的形式来进行显示,每一行显示的内容为commit id(提交的版本号)+提交时候的描述:

commit id是一个非常大的数字,为什么需要这么大的数字作为id?主要是为了避免提交版本号的冲突。每提交一个版本,Git就会把它们自动串成一条时间线。我们可以直接使用可视化工具查看提交历史的时间线:

右键Git仓库--------->Git History

(2)版本跳转命令:git reset --hard HEAD

HEAD表示当前版本,也就是最新的版本,那么上一个版本就是HEAD^,上上一个版本就是HEAD^^,依次类推。当然,如果存在100个版本,那就得写100个^,屏幕根本没法显示,也很麻烦。所以,还有另一种表达方式:HEAD0、HEAD1、HEAD2...。还可以再有一种方式:git reset --hard +commit id(一般写前5位即可:git reset --hard cb926)。

注:方式一,会造成版本回退!!!覆盖。(比如从版本2回退到版本1,可以回退。但是从版本1再跳到版本2,版本2就没了!),所以,版本的跳转,建议使用第二种方式。

版本跳转示例:不覆盖当前版本

xxxxxx@srv-pad-compile5:$ git log -2

commit ccdc3efc8364400788bc704810a40e2c648bd507

Author: xxxxxx <xxxxxx@xxxxxx-semi.com>

Date:   Mon Mar 9 14:30:25 2020 +0800

    success to enum

   

    Change-Id: I86f1c22046ff9e667eb90ea7e5c1a9113cdc77e5

commit cbab012075903d0e96b8b2032a12125bdaa4444f

Author: xxxxxx<xxxxxx@xxxxxx-semi.com>

Date:   Sat Mar 7 15:49:47 2020 +0800

    success to add HD audio play support

   

Change-Id: Ie0fcb483e41d7e7e765a37c305ba9b5e1aaa0aa2

xxxxxx@srv-pad-compile5:$ git reset --hard cbab012075903d0e

HEAD is now at cbab012075 success to add HD audio play support

weiguopai@srv-pad-compile5:$ git log -2

commit cbab012075903d0e96b8b2032a12125bdaa4444f

Author: xxxxxx <xxxxxx@xxxxxx-semi.com>

Date:   Sat Mar 7 15:49:47 2020 +0800

    success to add HD audio play support

   

    Change-Id: Ie0fcb483e41d7e7e765a37c305ba9b5e1aaa0aa2

commit f2710863dc73c961f6570403f105265ea9aefa83

Author: xxxxxx<xxxxxx@xxxxxx-semi.com>

Date:   Sat Mar 7 14:02:15 2020 +0800

    ready to add HD support

   

    Change-Id: Ic966af7cc592636e915eccda35c9cd04b1cdbacb

跳转到前一个版本怎么操作:

xxxxxx@srv-pad-compile5:$ git reflog

cbab012075 HEAD@{0}: reset: moving to cbab012075903d0e

ccdc3efc83 HEAD@{1}: reset: moving to ccdc3efc83

cbab012075 HEAD@{2}: reset: moving to cbab012075903d0e9

ccdc3efc83 HEAD@{3}: commit: success to enum

cbab012075 HEAD@{4}: commit: success to add HD audio play support

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

xxxxxx@srv-pad-compile5:$ git reset ccdc3efc83

Unstaged changes after reset:

M       samples/actions_sdk_demo/usb_audio_sourcesink/prj.conf

M       samples/actions_sdk_demo/usb_audio_sourcesink/src/Makefile

M       samples/actions_sdk_demo/usb_audio_sourcesink/src/usb_handler.c

M       subsys/usb/class/audio_sourcesink/audio_sourcesink.c

xxxxxx@srv-pad-compile5:$ git log -2

版本成功回退

commit ccdc3efc8364400788bc704810a40e2c648bd507

Author: xxxxxx <xxxxxx@xxxxxx-semi.com>

Date:   Mon Mar 9 14:30:25 2020 +0800

    success to enum

    Change-Id: I86f1c22046ff9e667eb90ea7e5c1a9113cdc77e5

commit cbab012075903d0e96b8b2032a12125bdaa4444f

Author: xxxxxx<xxxxxx@actions-semi.com>

Date:   Sat Mar 7 15:49:47 2020 +0800

    success to add HD audio play support

Change-Id: Ie0fcb483e41d7e7e765a37c305ba9b5e1aaa0aa2

注意:版本回退跳转之后,会将改动的文件还原,记得再次git checkout !!

如下:

xxxxxx@srv-pad-compile5:$ git reflog -10

cbab012075 HEAD@{0}: reset: moving to cbab012075903d0e96b8b2032a12125bdaa4444f

ccdc3efc83 HEAD@{1}: reset: moving to ccdc3efc83

cbab012075 HEAD@{2}: reset: moving to cbab012075903d0e

ccdc3efc83 HEAD@{3}: reset: moving to ccdc3efc83

cbab012075 HEAD@{4}: reset: moving to cbab012075903d0e9

ccdc3efc83 HEAD@{5}: commit: success to enum

cbab012075 HEAD@{6}: commit: success to add HD audio play support

f2710863dc HEAD@{7}: commit: ready to add HD support

4a93eb3b78 HEAD@{8}: commit: ready to add HD support

d4483a74b6 HEAD@{9}: commit: ready to init volume_sync

(3)查看命令历史:git reflog

使用这个命令,可以显示命令历史记录。

4.4 几个重要的概念

工作区:工作区就是个目录,而且就是仓库目录。

版本库:版本库其实就是工作区里面的隐藏文件.git。版本库里面包含两部分,一个是暂存区(stage/index),另一个是Git为我们自动创建的第一个分支master。

使用add命令的之后,是把文件添加到了暂存区,然后使用commit之后,才会将更改提交到master分支里面。可以这么理解,需要提交的文件修改,通通放到暂存区,然后使用commit一次性提交所有的修改。

查看工作区和版本库里面最新的版本的区别:git diff HEAD --filename

4.5 撤销修改

在没有使用add命令将修改添加到暂存区之前,可以使用命令git checkout --filename来丢弃工作区的修改,那么就回到和版本库一模一样的状态。如果已经添加到暂存区只会,文件又做了修改,那么使用命令之后,那么就回到添加暂存区一样的状态。

总之,这个命令会回到最近一次git add或者git commit的状态。

4.6 删除文件

删除也是改动,Git可以跟踪到哪个文件被删除了,所以删除之后,要记得重新提交一次修改。

5. 远程仓库(免费的Git服务端)

GitHub 是一个网站(官网链接:https://github.com/),它提供 Git 仓库托管服务的。 只要注册一个 GitHub 账号,就可以免费获得 Git 远程仓库。 免费使用的前提是你的仓库是公开的, 别人可以随便下载源码。如果想把公开仓库变为私有的,需要交费。

对于第 1 次使用 GitHub,需要执行以下步骤:
(1) 创建 SSH Key:
         在用户主目录下,看看有没有.ssh 目录,如果有,再看看这个目录下有没有 id_rsa 和
id_rsa.pub 这两个文件,如果已经有了,可直接跳到下一步。
         如果没有,打开命令行(Windows 下是打开 Git Bash),在用户主目录下创建 SSH Key, 命令如下:
ssh-keygen -t rsa -C "3437255484@qq.com"
邮件是自己的邮件地址,然后一路回车,使用默认值即可。
         如果一切顺利的话,可以在用户主目录里找到.ssh 目录,里面有 id_rsa 和 id_rsa.pub 两个文件, 它们是 SSH Key 的秘钥对。 id_rsa 是私钥,不能泄露出去; id_rsa.pub 是公钥,可以放心地告诉任何人。

(2) 注册 GitHub 用户:
         登录 https://github.com/, 在首页输入用户名、 EMAIL、密码,进行注册。


(3) 在 GitHub 里添加 SSH Key:
点击网页右上角的绿色按钮,选择“Settings”:

在新界面中,按下图中标号顺序选择、填写(其中 Title 可以任意写, Key 为 id_rsa.pub

文件的内容):

(4) 创建仓库:
点击网页右上角的“+”号,选择“New repository”


以JNIDemo 为例,在如下界面中,写入仓库名(“Repository name”)、描述信息“( Description”),然后点击“Create repository”按钮:

为什么 GitHub 需要 SSH Key 呢?因为 GitHub 需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而 Git 支持 SSH 协议,所以, GitHub 只要知道了你的公钥,就可以确认只有你自己才能推送。当然, GitHub 允许你添加多个 Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的 Key 都添加到 GitHub,就可以在每台电脑上往 GitHub 推送了。
最后友情提示,在 GitHub 上免费托管的 Git 仓库,任何人都可以看到喔(但只有你自己才能改)。所以,不要把敏感信息放进去。


(5) 提交本地仓库到 GitHub:
以本地的 JNIDemo 仓库为例,先在命令行里进入 JNIDemo 目录,执行以下命令:
 

git remote add origin git@github.com:wgp/JNIDemo.git


git push -u origin master
git push origin --tags


上述命令中:

第 1 个命令是把本地的 JNIDemo 仓库和 GitHub 上的 JNIDemo 仓库关联起来。
第 2 个命令是把本地仓库的 master 分支推送到 GitHub 上。
第 3 个命令是把本地标签推送到 GitHub 上。


注意: 第一次推送时要加上“-u”选项, Git 不但会把本地的 master 分支内容推送的远程新的 master 分支,还会把本地的 master 分支和远程的 master 分支关联起来,在以后的推送或者拉取时就可以简化命令:


注意: SSH 警告
当你第一次使用 Git 的 clone 或者 push 命令连接 GitHub 时,会得到一个警告:

The authenticity of host 'github.com (xx.xx.xx.xx)' can't be established.
RSA key fingerprint is xx.xx.xx.xx.xx.
Are you sure you want to continue connecting (yes/no)?


 这是因为 Git 使用 SSH 连接,而 SSH 连接在第一次验证 GitHub 服务器的 Key 时,需要你确认 GitHub 的 Key 的指纹信息是否真的来自 GitHub 的服务器,输入 yes 回车即可。从现在起,只要本地作了提交,就可以通过以下命令把本地 master 分支的最新修改推送至 GitHub:

git push origin master  //推送master分支到Github
git push origin --tags   //推送标签到Github

(6)克隆远程仓库

命令:git clone git@github.com:wgp/JNIDemo.git

Github给出的地址不止一个,还可以使用这样的地址:https://github.com/wgp/JNIDemo.git

这是因为,Git支持多种协议,默认的Git使用SSH协议,还可以使用https协议。使用https协议有缺点: 速度相对较慢、每次推送都必须输入口令。但是也要看开发环境,比如某些公司内部只开放HTTP端口,那么就没法使用ssh了。有时候,主机翻墙,得看具体使用的是什么协议。比如我的翻墙:

这时候,就不能使用https://github.com/wgp/JNIDemo.git这个命令了,因为不支持,会出现无法连接到远程仓库的错误。那么就得使用Git原生态所支持的ssh协议了。

(7)标签管理

a. 创建标签

发布一个版本的时候,通常都是在版本中打一个标签来进行管理。以后就可以根据标签来取出自己想要的版本,所以标签也称为版本库的一个快照。

创建标签的命令:git tag 标签名

查看所有标签:git tag

创建带有说明的标签:git tag -a 标签名 -m “description”

查看标签说明:git show 标签名

注:默认的标签是打在最新提交的commit上的,如果要给指定的commit提交标签,在后面指定commit id即可,如下:

创建标签的命令:git tag 标签名 commit id

创建带有说明的标签:git tag -a 标签名 -m “description” commit id

b. 删除标签

(1首先查看本地存在标签

git tag

1.0.0

(2然后先删除本地标签

git tag -d 1.0.0

[可以一次性删除多个标签:git tag –d 标签1 标签2 ……]

(3然后推送到远程仓库

git push origin --delete 1.0.0

[可以一次性删除多个标签]

6. 分支管理

   暂时留空

7. 下载代码完整流程

(1)创建本地仓库、远程仓库

git init

(2)关联本地仓库和远程仓库

git remote add origin git@github.com:wgp/JNIDemo.git
git push -u origin master

(3)添加修改到暂存区并且提交修改

git add xxxx/git add  -A

git commit -m “description”

(4)给提交打上标签

git tag xxx [commit id]

(5)将修改和标签同步到Github

git pull –u origin master

git pull origin --tags

克隆远程仓库:

(1)先把远程仓库都克隆过来

注:JNIDemo.git----->远程仓库名.git

(2)查看tag     

git tag            //先查看所有标签

git show tagname   //查看某个具体标签的描述

(3)取出自己想要的版本

git checkout tagname

注:取出对应版本代码后,复制到其他地方做修改,不要在当前目录下进行修改。

下一篇:Git命令和问题集_卡卡6的博客-CSDN博客

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/617503
推荐阅读
相关标签
  

闽ICP备14008679号