引入
作为一个白帽子,使用github的唯一目的是记录自己的研究项目,存放学习笔记,备份资料等等。对协同开发的需求不大,简单使用Git的几个命令就可以上传本地文件到远程服务器,很多人说很繁琐,喜欢使用GUI版本的github for Desktop,那么这就看个人喜好了~接下来的内容仅适合同我情况差不多的人阅读!
详细的学习教程-->菜鸟教程 for Git
Git和github的关系
git
是分布式版本控制工具(Version control),它可在本地建立仓库,你写的代码的各个版本都可以存着 ;
github
是一个面向开源及私有软件项目的托管平台,相当于网上仓库,你写的代码的各个版本都可以存着;
历史渊源
:Git比GitHub出生的早。事件回到2005年,有个公司不允许linux系统继续免费使用它们的版本控制软件了,然后linux系统创始人Torvalds一气之下花了10天时间创造了Git(第一个版本),并且开源给所有人免费试用。3年后,Tom Preston使用Git作为版本控制软件创建了http://Github.com,一个专门托管代码并且可以实现版本控制的网站。Tom之所以把网站叫做Github,是因为其核心部分版本控制是用Git来处理的。但是 为什么有人回复调侃Github是全球最大男性交友网站呢?那是因为Github的注册用户大都是男生,而且彼此之间可以相互关注(类似于微博)
Git概览
所有命令前都要加 git
,如表中的init
是指 git init
。
点击命令可直接跳转至本文第一次使用的地方。
以下命令都在命令行里执行。
1、个人本地使用
行为 | 命令 | 备注 |
---|---|---|
初始化 | init | 在本地的当前目录里初始化git仓库 |
clone [url] | 从网络上某个地址拷贝仓库(repository)到本地 | |
查看当前状态 | status | 查看当前仓库的状态。 |
查看不同 | diff | 查看当前状态和最新的commit之间不同的地方 |
添加文件 | add -A | 这算是相当通用的了。在commit之前要先add |
提交 | commit -m "提交信息" | 提交信息最好能体现更改了什么 |
查看提交记录 | log | 查看当前版本及之前的commit记录 |
2、个人使用远程仓库
行为 | 命令 | 备注 |
---|---|---|
设置用户名 | config --global user.name "你的用户名" | |
设置邮箱 | config --global user.email "你的邮箱" | |
生成ssh key | ssh-keygen -t rsa -C "你的邮箱" | 这条命令前面不用加git |
添加远程仓库 | remote add origin 你复制的地址 | 设置origin |
上传并指定默认 | push -u origin master | 指定默认主机,以后push默认上传到origin上 |
提交到远程仓库 | push | 将当前分支增加的commit提交到远程仓库 |
从远程仓库同步 | pull | 获取远程仓库的commit |
可以使用一张图直观地看出以上主要命令对仓库的影响
图片引用自:[Git introduction for CVS/SVN/TFS users]
图片引用自:工作区和暂存区 - 廖雪峰的官方网站 (做了点修改)
对照查看两张图:
- workspace 即工作区,逻辑上是本地计算机,还没添加到repository的状态;
- staging 即版本库中的stage,是暂存区。修改已经添加进repository,但还没有作为commit提交,类似于缓存;
- Local repository 即版本库中master那个地方。到这一步才算是成功生成一个新版本;
- Remote repository 则是远程仓库。用来将本地仓库上传到网络,可以用于备份、共享、合作。本文将使用Github作为远程仓库的例子。
Git 安装
Git for windows
- 安装包可以到官方网站下载,或者在github下载。如果下载不下来,可以把链接复制下来用迅雷下载。如果用迅雷下载不放心,在下载完后去在github下载的那个地方查看SHA-256值,并和下载的文件对比,如果值一样就可以放心使用。
- 安装的时候一路点击
Next
就行了。 - 刚安装完打开后,窗口比较小。如果不太习惯,可以把它改大一些。
- 首先移到窗口右下角边缘,出现箭头后把窗口拉大。
- 点击窗口顶部左边的图标 -> Options... -> Window -> Current size -> OK
这样以后打开窗口都会是调整后的大小。
Git for Windows从2.8.0版本开始,默认添加环境变量,所以环境变量部分就不用再手动配置了。
Git for Linux
Git 的工作需要调用 curl,zlib,openssl,expat,libiconv 等库的代码,所以需要先安装这些依赖工具。
在有 yum 的系统上(比如 Fedora)或者有 apt-get 的系统上(比如 Debian 体系),可以用下面的命令安装:
各 Linux 系统可以使用其安装包管理工具(apt-get、yum 等)进行安装:
Debian/Ubuntu
Git 安装命令为:
$ apt-get install libcurl4-gnutls-dev libexpat1-dev gettext \
libz-dev libssl-dev
$ apt-get install git
$ git --version
git version 1.8.1.2
用户信息配置
配置个人的用户名称和电子邮件地址:
$ git config --global user.name "Qymua"
$ git config --global user.email "[email protected]"
如果用了 --global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。
如果要在某个特定的项目中使用其他名字或者电邮,只要去掉 --global 选项重新配置即可,新的设定保存在当前项目的 .git/config 文件里。
Git for github
到这里表示已经可以开始使用Git上传项目到github了
添加ssh key
由于你的本地 Git 仓库和 GitHub 仓库之间的传输是通过SSH加密的,所以我们需要配置验证信息:
使用以下命令生成 SSH Key:
$ ssh-keygen -t rsa -C "[email protected]"
后面的 [email protected] 改为你在 Github 上注册的邮箱,之后会要求确认路径和输入密码,我们这使用默认的一路回车就行。成功的话会在 ~/ 下生成 .ssh 文件夹,进去,打开 id_rsa.pub,复制里面的 key。
回到 github 上,进入 Account => Settings(账户配置)。
左边选择 SSH and GPG keys,然后点击 New SSH key 按钮,title 设置标题,可以随便填,粘贴在你电脑上生成的 key。
添加成功后为了验证是否成功,输入以下命令:
$ ssh -T [email protected]
Hi tianqixin! You've successfully authenticated, but GitHub does not provide shell access.
新建仓库
这里不再说明如何创建了,只介绍下相应选项的用途
Repository name: 仓库名称
Description(可选): 仓库描述介绍
Public, Private : 仓库权限(公开共享,私有或指定合作者)
Initialize this repository with a README: 添加一个README.md
gitignore: 不需要进行版本管理的仓库类型,对应生成文件.gitignore
license: 证书类型,对应生成文件LICENSE
开始上传
1、在本地创建一个版本库(即文件夹),通过git init把它变成Git仓库;
2、把项目复制到这个文件夹里面,再通过git add .
把项目添加到仓库;
3、再通过git commit -m "注释内容"把项目提交到仓库;
4、通过git remote add origin https://github.com/用户名/项目名.git 将本地仓库和远程仓库进行关联;
5、最后通过git push -u origin master把本地仓库的项目推送到远程仓库(也就是Github)上;
由于新建的远程仓库是空的,所以要加上-u这个参数,等远程仓库里面有了内容之后,下次再从本地库上传内容的时候只需下面这样就可以了:
$ git push origin master
(若新建远程仓库的时候自动创建了README文件会报错,解决办法看下面)。
这是由于你新创建的那个仓库里面的README文件不在本地仓库目录中,这时我们可以通过以下命令先将内容合并以下:
$ git pull --rebase origin master
工作区迁移
1、在新环境下配置好Git;
2、通过git init把它变成Git仓库;
3、git clone [url] 克隆仓库到本地;
4、git add . 添加项目到仓库(缓存区);
5、通过git remote add origin https://github.com/用户名/项目名.git 将本地仓库和远程仓库进行关联;
6、其实到这里已经迁移完成,主要是下载到本地,添加Git仓库后,再把项目同步到本地仓库上
本文涉及的术语
- Version Control(版本控制): 任何一个能够让你了解文件的历史,以及该文件的发展进程的系统。
- Git:一个版本控制程序,通过对变更进行注释,以创建一个易于遍历的系统历史。
- Commit(提交):在指定时间点对系统差异进行的注释 “快照”。
- Local(本地):指任意时刻工作时正在使用的电脑。
- Remote(远程): 指某个联网的位置。
- Repository (仓库,简称 repo):配置了Git超级权限的特定文件夹,包含了你的项目或系统相关的所有文件。
- Github:获取本地提交历史记录,并进行远程存储,以便你可以从任何计算机访问这些记录。
- Pushing(推送):取得本地Git提交(以及相关的所有工作),然后将其上传到在线Github。
- Pulling(拉取):从在线的Github上获取最新的提交记录,然后合并到本地电脑上。
- Master (branch):主分支,提交历史 “树”的 “树干”,包含所有已审核的内容/代码。
- Feature branch(功能分支/特性分支):一个基于主分支的独立的位置,在再次并入到主分支之前,你可以在这里安全地写工作中的新任务。
- Pull Request(发布请求):一个 Github 工具,允许用户轻松地查看某功能分支的更改 (the difference或 “diff”),同时允许用户在该分支合并到主分支之前对其进行讨论和调整。
- Merging(合并):该操作指获取功能分支的提交,加入到主分支提交历史的顶部。
- Checking out(切换):该操作指从一个分支切换到另一个分支。