Git与GitHub的简单了解(1)

时间:2021-09-08 01:59:40

[TOC]

本文参考书籍GitHub入门与实践整理所得,另外可以查阅Git Community Book中文版本以及外文版本资料链接

Git与GitHub

1. 前言

GitHub:为开发者提供Git仓库的托管服务

在Git中,开发者将源代码存入名为“Git仓库”的资料库中并加以使用,而GitHub则是在网络上提供Git仓库的一项服务。也就是说,GitHub上公开的软件源代码全部都由Git进行管理。

Pull Request指开发者在本地对源代码进行更改后,向GitHub中托管的Git仓库请求合并的功能。


​ 版本管理在开发一款软件中占据着非常重要的低位,其必不可少的原因在于:可以记录一款软件添加或更改源代码的过程,回滚到特定的阶段,恢复误删除的文件等等..

​ 常规的版本管理分为集中型和分散型:

  • 集中型

​ 以Subversion为代表,其将仓库集中存放在服务器之中,具有便于管理的优点,但一旦开发者所处的环境不能连接服务器时,就无法获取最新的源代码,开发亦无法进行。


Git与GitHub的简单了解(1)

  • 分散型

​ 以Git为代表的分散型如下:GitHub将仓库Fork给每一个用户,Fork就是将 GitHub 的某个特定仓库复制到 自己的账户下。 Fork 出的仓库与原仓库是两个不同的仓库,开发者可以 随意编辑


Git与GitHub的简单了解(1)

​ 分散型具有多个仓库,相对较复杂,但因为可以Fork到本地的开发环境下,所以开发者不必连接远程仓库即可进行开发。

导入与安装Git :笔者为windows下的系统,下载链接如下:链接 详细安装过程若下:安装 也可以参看书籍中的章节介绍-->“GitHub入门与实践”

1.1 必要设置

​ 注册github账号,安装好git后,首先应该设置SSH Key SSH 原理和基本使用

加密传输的算法有好多,git可使用rsa,rsa要解决的一个核心问题是,如何使用一对特定的数字,使其中一个数字可以用来加密,而另外一个数字可以用来解密。这两个数字就是你在使用git和github的时候所遇到的public key也就是公钥以及private key私钥。

其中,公钥就是那个用来加密的数字,这也就是为什么你在本机生成了公钥之后,要上传到github的原因。从github发回来的,用那公钥加密过的数据,可以用你本地的私钥来还原。

如果你的key丢失了,不管是公钥还是私钥,丢失一个都不能用了,解决方法也很简单,重新再生成一次,然后在github.com里再设置一次就行

$ ssh-keygen -t rsa -C "your_email@example.com"
Generating public/private rsa key pair.
Enter file in which to save the key
(/Users/your_user_directory/.ssh/id_rsa): 按回车键
Enter passphrase (empty for no passphrase): 输入密码
Enter same passphrase again: 再次输入密码

​ “your_email@example.com”的部分修改为创建账户时所使用的邮箱地址,成功后会显示:

Your identification has been saved in /Users/your_user_directory/.ssh/id_rsa.
Your public key has been saved in /Users/your_user_directory/.ssh/id_rsa.pub.
The key fingerprint is:
fingerprint值 your_email@example.com
The key's randomart image is:
+--[ RSA 2048]----+
| .+ + |
| = o O . |

​ id_rsa 文件是私有密钥, id_rsa.pub 是公开密钥 。

2. Git的基本操作

  • git init ---- 初始化仓库
$ mkdir git-tutorial
$ cd git-tutorial
$ git init

​ 上述代码新建了一个名为git-tutorial的文件夹,通过git init语句进行初始化操作,执行后,git-tutorial目录下生成.git目录:

Initialized empty Git repository in /Users/hirocaster/github/github-book
/git-tutorial/.git/

​ 这个目录里存储着管理当前目录所需要的仓库数据,也被称为:附属于该仓库的工作树。因此若希望将文件恢复到原先的状态,可以从仓库中调取之前的快照,在工作树中打开。

  • git status ---- 查看仓库的状态
$ git status
# On branch master
#
# Initial commit
#
nothing to commit (create/copy files and use "git add" to track)

​ 结果显示了我们当前正处于 master 分支下。(分支 会在之后讲到)还显示了没有可提交的内容。

​ 因此,我们建立 README.md 文件作为管理对 象,为第一次提交做前期准备 。

$ touch README.md
$ git status
# On branch master
#
# Initial commit
## Untracked files:# (use "git add <file>..." to include in what will
be committed)#
# README.md
nothing added to commit but untracked files present (use "git add" to
track)

​ 可以看到在 Untracked files 中显示了 README.md 文件 。

  • git add ----- 向暂存区中添加文件

​ 若只是在Git仓库的工作树中创建文件,该文件并不会被记入Git仓库的版本管理对象当中,用git status查看会显示在Untracked files里。如果想让文件成为Git仓库的管理对象,就需要git add命令将其加入暂存区(Stage或Index中)。

$ git add README.md
$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
#
# new file: README.md
#

​ 可以看到, README.md 文件显示在 Changes to be committed 中了。

  • git commit ---- 保存仓库的历史记录

​ git commit命令可以将当前暂存区中的文件实际保存到仓库的历史记录中,通过这些历史记录我们可以在工作树中复原文件。

  • 记录一行的提交信息

    $ git commit -m "First commit"
    [master (root-commit) 9f129ba] First commit
    1 file changed, 0 insertions(+), 0 deletions(-)
    create mode 100644 README.md

    -m参数后的“First commit”称作提交信息。如果在编辑器启动后想中止提交,请将提交信息留空并直接关闭编辑器,随后提交就会被中止。

  • git log ----- 查看提交日志

​ git log命令可以查看以往仓库中提交的日志 ,可以查看什么人在什么时候进行了提交或合并,以及操作前后有怎样的差别 。

$ git log

commit 9f129bae19b2c82fb4e98cde5890e52a6c546922
Author: hirocaster <hohtsuka@gmail.com>
Date: Sun May 5 16:06:49 2013 +0900

First commit

​ Author 栏中显示我们给 Git 设置的用户名和邮箱地址。 Date 栏中显示提交执行的日期和时间。再往下就是该提交的提交信息 。

只显示提交信息的第一行

​ 如果只想让程序显示第一行简述信息(date行略去),可以在 git log命令后加上 --pretty=short

$ git log --pretty=short

commit 9f129bae19b2c82fb4e98cde5890e52a6c546922
Author: hirocaster <hohtsuka@gmail.com>

First commit

仅显示指定目录、文件和日志

​ 只要在 git log命令后加上目录名,便会只显示该目录下的日志 ,若加的是文件名,就会只显示与该文件相关的日志。

$ git log README.md

显示文件的改动

​ 如果想查看提交所带来的改动,可以加上 -p参数,文件的前后差别就会显示在提交信息之后 :

$ git log -p
  • git diff ---- 查看更改前后的差别

​ git diff命令可以查看工作树、暂存区、最新提交之间的差别 ,我们现在向README.md文件中加入了一行:

# Git教程

​ 执行 git diff命令,查看当前工作树与暂存区的差别 :

$ git diff

diff --git a/README.md b/README.md
index e69de29..cb5dc9f 100644
--- a/README.md
+++ b/README.md
@@ -0,0 +1 @@
+# Git教程

​ 解释一下显示的内容。“+”号标出的是新添加的行,被删除的行则用“-”号标出。我们可以看到,这次只添加了一行。 在执行 git commit命令之前先执行git diff HEAD命令,查看本次提交与上次提交之间有什么差别,等
确认完毕后再进行提交。这里的 HEAD 是指向当前分支中最新一次提交的指针。

$ git diff HEAD

diff --git a/README.md b/README.md
index e69de29..cb5dc9f 100644
--- a/README.md
+++ b/README.md
@@ -0,0 +1 @@
+# Git教程