GitHub官方文档自学记录

初衷

  • 写这个文档是因为,我在实习过程中发现Git真的太重要了,你需要的东西都在远程仓库里,不论是GitHub还是公司的GitLab,且假如在Linux服务器环境下,只有命令行,所以你必须学会使用Git的命令来操作。

Git是个啥?

  • Git是一个版本控制工具,由Linux之父所创造,其目的是为了管理Linux内核代码(庞大且复杂)
  • 什么是版本控制工具呢?相信你有过这样的体验:当你修改论文时,你会不断修改,不断产生一个新的版本,你就会给这些不同的文件命名,这就是版本控制
  • 那么,假如有一个工具可以帮助你记录你的各个版本内容呢?这就是Git
  • 既然它是一个工具,那么你就需要将它下载并安装,这样你就拥有了这个版本管理工具(官网下载:https://git-scm.com/download)
  • Git在使用时往往不会使用GUI,且GitBash是基于Linux的,所以你需要掌握一些常用的Linux命令

Git仓库是啥?

  • Git仓库其实就是一个文件夹,是你的工作目录,你所有的修改都必须在这个文件夹中,Git工具才能监测得到
  • Git仓库的创建方式有两种,我们可以使用Git的命令行工具(鼠标右键单击并选择GitBash),一种方式是在本地创建仓库(git init),第二种方式是使用远程仓库克隆(git clone 远程仓库地址)
  • 远程仓库也是Git仓库,只不过init创建的仓库在你的本机上,而远程仓库(GitHub,Gitee)则是存在于别人的服务器上,这就是区别

  • 那么有了远程仓库这个概念,我们也可以引申出分布式版本控制工具的概念,Git就是一个分布式版本控制工具
  • 同样的一个远程仓库,假如多人同时使用,他们都可以clone一份到自己的电脑上,这就叫分布式
  • 而这样做的好处就是不受服务器的影响(宕机),也不受网络连接的限制(断网)

开始使用Git

  • 首先,我们需要配置Git的用户名和邮箱,这样在多人合作时,谁干的坏事(bushi)就清清楚楚了
git config --global user.name "xxxxxxxx"
git config --global user.email "xxxxxxxxxxxx@xxxxxx"
  • 接下来,我们就要创建我们的本地仓库了,可以通过两种方式
git init	#在某个工作文件夹中右键Gitbash,然后用这条命令创建Git仓库
git clone 远程仓库地址/SSH	#在本地文件夹中克隆远程仓库,变成自己的仓库,会在当前文件夹下产生一个新的文件夹
  • 这里我们提一下在例如GitHub的远程仓库下下载项目压缩包与git clone的区别
    • 你能很直观的发现,直接下载的要比clone来的少了一个.git文件夹,这才是git最核心的文件夹,一般我们不会去动这个文件夹
    • 假如你使用git init,文件夹中也会默认多出一个.git文件夹
  • 当你使用git clone SSH地址时,比如你使用git clone git@gitee.com:daydayupchen/USTC-ncov-AutoReport.git,你就不需要每次都输入账户密码了,但需要设置一下公钥私钥,具体内容可参考:https://blog.csdn.net/daydayupchen/article/details/126266277

Git基础知识

  • 首先我们说一下本地
    • 本地分为工作区、暂存区与仓库
    • 工作区呢就是你工作的这个文件夹
    • 暂存区你是看不到的,是由git管理的
    • 本地仓库你同样看不到
  • 本地仓库与远程仓库之间是可以互传的(pull和push)

添加到暂存区(add)

  • 我们使用git add命令将一个你新建/修改的文件添加到暂存区
  • 此时文件的状态会从unstaged变成staged,假如没问题就可以提交修改了
echo "learn git" > ./learn.txt	#新建一个文件并写入内容
git add learn.txt	#我想让git帮我监视,所以我要把它给add起来

git status	#查看当前的状态
 (use "git restore --staged <file>..." to unstage)	#git提示你可以这样取消追踪某个文件
  • 此时,你就可以用git status命令查看,你会看到已经add过的放在暂存区的文件
  • 在git中,所有文件只有两种状态,一种就是staged,另一种就是unstaged,区别就在于git是否监视的问题
  • 如果你已经追踪了一些文件,那么git会帮你监控,如果文件发生改变,则git会提示你,并且你可以继续add这个新文件
  • 将这个命令理解为“精确地将内容添加到下一次提交中”而不是“将一个文件添加到项目中”要更加合适。
  • git add 命令使用文件或目录的路径作为参数;如果参数是目录的路径,该命令将递归地跟踪该目录下的所有文件

提交到本地仓库(commit)

  • 当你使用git commit的时候,git会将你的暂存区中的文件(就是被add过处于staged状态的文件)提交到本地仓库,就相当于你更新了这个本地仓库
git commit -m "我的第一次提交"
  • -m表示你的备注信息,这样有利于在未来回过头查找的时候清楚的知道这个版本做出了什么修改
  • 如果你不写-m的话,git会自动跳转到一个vim编辑器(这是git的默认编辑器,你也可以自行修改),将信息写在那个文件里,这就比较麻烦了
  • 当然,也有一步提交的方法(现在是先add后commit)
git commit -am "add与commit结合在一起"
  • -a就表示add,这样实现一步操作
  • 只有在暂存区的文件版本会被提交,如果你在add某个文件以后又对这个文件做出修改,则commit时是不会提交最新的修改的,除非你再一次add

git状态查看(status)

  • 我们使用这个命令来查看当前的状态
  • 我们之前已经用过了,但我们可以看出,输出结果有一些复杂,看起来有一点乱
  • 所以我们可以使用如下参数
git status -s

#输出如下
 M README
MM Rakefile
A lib/git.rb
M lib/simplegit.rb
?? LICENSE.txt
  • 这种输出更为紧凑
  • 不难发现状态栏有两列,左边那列表示暂存区,右边那列表示工作区
  • ??表示这个文件是新建的,没有经过add
  • A表示在暂存区中,还未提交
  • 工作区M暂存区为空:表示文件发生了改变,但没有添加到暂存区(就像README文件一样)
  • 暂存区为M工作区为空:文件发生了修改且已添加到暂存区(就像lib/simplegit.rb一样)
  • 暂存区和工作区全部为M,这就说明修改一次后add到了暂存区,但是又在工作区做出了修改

忽略文件

  • 你是不是经常在git项目的根目录中看到一个叫做.gitignore的文件?
  • 顾名思义这个文件就是告诉git:这些文件你就不需要追踪了
  • 这个文件中的写法需要你了解一些正则表达式的知识
  • 以下列出官方文档给出的例子
# 忽略所有的 .a 文件
*.a
# 但跟踪所有的 lib.a,即便你在前面忽略了 .a 文件
!lib.a
# 只忽略当前目录下的 TODO 文件,而不忽略 subdir/TODO
/TODO
# 忽略任何目录下名为 build 的文件夹
build/
# 忽略 doc/notes.txt,但不忽略 doc/server/arch.txt
doc/*.txt
# 忽略 doc/ 目录及其所有子目录下的 .pdf 文件
doc/**/*.pdf

所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。

星号(*)匹配零个或多个任意字符;

[abc] 匹配任何一个列在方括号中的字符 (这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);

问号(?)只匹配一个任意字符;

如果在方括号中使用短划线分隔两个字符, 表示所有在这两个字符范围内的都可以匹配 (比如 [0-9] 表示匹配所有 0 到 9 的数字)。

使用两个星号(**)表示匹配任意中间目录,比如 a/**/z 可以匹配 a/z 、 a/b/z 或 a/b/c/z 等

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值