本文参考书籍GitHub入门与实践整理所得,另外可以查阅Git Community Book中文版本以及外文版本资料链接
Git与GitHub
1. 前言
GitHub:为开发者提供Git仓库的托管服务
在Git中,开发者将源代码存入名为“Git仓库”的资料库中并加以使用,而GitHub则是在网络上提供Git仓库的一项服务。也就是说,GitHub上公开的软件源代码全部都由Git进行管理。
Pull Request指开发者在本地对源代码进行更改后,向GitHub中托管的Git仓库请求合并的功能。
版本管理在开发一款软件中占据着非常重要的低位,其必不可少的原因在于:可以记录一款软件添加或更改源代码的过程,回滚到特定的阶段,恢复误删除的文件等等..
常规的版本管理分为集中型和分散型:
- 集中型
以Subversion为代表,其将仓库集中存放在服务器之中,具有便于管理的优点,但一旦开发者所处的环境不能连接服务器时,就无法获取最新的源代码,开发亦无法进行。
- 分散型
以Git为代表的分散型如下:GitHub将仓库Fork给每一个用户,Fork就是将 GitHub 的某个特定仓库复制到 自己的账户下。 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教程