Git/Github简单入门指南

Git是什么?

Git最开始是Linux 之父 Linus Trovalds为管理 Linux 内核代码而开发的一个开放源码的版本控制系统。所以在很长一段时间内,Git只能在Linux和Unix系统上跑,后来慢慢地有人把它移植到了Windows上。现在,Git作为目前世界上最先进的分布式版本控制系统,在Linux、Unix、Mac和Windows这几大平台上都可以正常运行。

Github是什么?

在2008年4月10号,位于旧金山的三位大佬Chris Wanstrath, PJ Hyett 与Tom Preston-Werner创立了Github公司,主要提供基于git的代码托管服务。在Github上,付费用户可以建私人仓库,普通用户只能使用公开的公共仓库,但是Gitlab是允许免费设置仓库的权限是公开的还是私有的,我们公司也是用Gitlab来管理公司项目的。

我的Gitlab首页:

开始你的Git/Github之旅

第一步:注册github账号

登录成功后点击New repository按钮创建一个仓库

创建成功后的样子,readme是一个markdown文件,你可以在里面写你这个项目的信息。

github官网地址

第二步:下载Git

我的系统是windows,所以我下的是windows版本。下载好之后安装,基本就是一直点next就好了。

Git下载网址

第三步:配置Git

打开Git Bash。

配置自己的用户名和邮箱(Github的用户名和邮箱)。

$ git config --global user.name "Your username"
$ git config --global user.email "Your email"
复制代码

配置好之后可以在C:\Users\Admin下的.gitconfig里查看。

第四步:创建仓库并连接远端仓库

打开Gitbush,cd d:进入D盘文件夹,mkdir hellogit新建一个叫hellogit的空文件夹,执行git init。git会创建一个隐藏的文件夹.git,看不到这个文件的小伙伴可以去文件夹选项里设置显示隐藏文件夹,或者在该文件目录下用命令$ ls -lah也可以查看所有文件,包括隐藏文件。

配置SSH key。

Github每次pull/push代码时要求推送代码的用户是合法的,所以每次推送时候都要输入账号密码用以验证用户是否为合法用户,而ssh是一种安全的传输模式,可以代替用户的这一“输入账号密码”的行为来验证用户。

首先检查是否已经存在 id_rsa.pub 或者 id_dsa.pub 文件。

$ cd ~/.ssh
$ ls
复制代码

如果不存在,创建一个 SSH key。

$ ssh-keygen -t rsa -C "Your email"
复制代码

运行上面那条命令后会让你输入一个文件名,用于保存刚才生成的 SSH key 代码, 直接回车就可以,会保存到默认的位置,不知道的可以用 pwd 命令查看。

运行成功后去刚刚保存的位置,将id_rsa.pub 文件里面的内容复制到Github上。

添加SSH之后会让你验证一次密码,验证完成后会受到一封邮件。

现在你可以验证一下SSH key是否设置成功,如果你是第一次,会报一段警告,直接输入yes回车就可以了。

ssh –T [email protected]
复制代码

连接远程仓库

git remote add origin [email protected]:你的用户名/你的项目名.git
复制代码

比如你注册的Github的帐号是aaa,你创建了一个repository(仓库)叫bbb,那你就需要执行git remote add origin [email protected]:aaa/bbb.git。

这个连接好之后,如果你在创建仓库的时候选择了自动生成README.md文件,那你可以先本地同步一下远程仓库的内容

git pull [email protected]:你的用户名/你的项目名.git
复制代码

可以看到,现在本地仓库和远程仓库的内容已经同步了。

Git 常用命令速查

  • 查看当前的 Git 配置
$ git config --list
复制代码
  • 检查 SSH key
$ cd ~/.ssh
$ ls
复制代码
  • 生成 SSH key
$ ssh-keygen -t rsa -C [email]
复制代码
  • 在当前目录新建一个Git代码库
$ git init
复制代码
  • 新建一个目录,将其初始化为Git代码库
$ git init [project-name]
复制代码
  • 将项目克隆到本地
$ git clone [url]
复制代码
  • 检查状态
$ git status
复制代码

例如我在本地仓库新建了一个hellogit.html

git告诉我有个新增的hellogit.html的文件尚未被追踪,此时,我们需要将这个文件暂存起来。

  • 查看执行 git status 的结果的详细信息
$ git diff
复制代码
  • 暂存文件
$ git add hellogit.html 暂存单个文件
$ git add -A 暂存所有内容
复制代码

暂存之后重新执行git status,发现hellogit.html已经被成功跟踪,这时候我们需要提交我们的修改。

  • 提交修改
$ git commit -m "本次提交内容的信息"
复制代码
  • 推送到远程仓库
$ git push origin master
复制代码

git push命令会有两个参数,远端仓库的名字,以及分支的名字。master为主分支。

推送成功后可以看到远程仓库上已经有刚刚本地新建的hellogit.html文件了。

  • 从远程仓库上拉取代码
$ git pull origin master 从远程获取最新版本并merge到本地
[git pull 相当于 git fetch 和 git merge,在实际使用中,git fetch会相对安全一些,因为我们可以查看更新情况,然后再决定是否merge]
复制代码
  • 从远程获取最新版本到本地
$ git fetch origin master 从远程获取最新版本到本地,不会自动merge
$ git log -p master..origin/master 比较本地的master分支和origin/master分支的差别
$ git merge origin/master 进行合并

复制代码
  • 查看分支
$ git branch 查看所有本地分支
$ git branch -a 查看所有本地分支和远程分支
$ git branch -r 查看所有远程分支
复制代码
  • 创建分支
$ git branch [branch-name] 新建一个分支,但依然停留在当前分支
$ git checkout -b [branch-name] 新建一个分支,并切换到该分支
复制代码
  • 推送本地分支到远程仓库
$ git push [remote] [branch]
example:
$ git push origin branch2
复制代码

  • 切换分支
$ git checkout xxxx
复制代码
  • 合并分支
$ git merge xxxx
复制代码
  • 删除分支
$ git branch -d xxxx
复制代码
  • 删除Github上的远程分支
$ git push origin :xxxx
复制代码
  • 查看远程仓库信息
$ git remote show origin
复制代码
  • 删除远程仓库已经不存在的分支
$ git remote prune origin
复制代码
  • 查看提交
$ git log 查看所有提交, -p 显示每次提交的内容差异, -2 则仅显示最近的两次更新
$ git show xxx 查看id为xxx的提交的信息
复制代码
  • 回滚文件到之前的版本
$ git checkout b2e4ab95 hellogit.html
复制代码

b2e4ab95为某次提交的id的前半部分。

  • 关于Git冲突解决

首先创建一个branch1分支,在branch1分支上修改README.md文件并提交。

然后我们切换回主分支,并在主分支上同样修改README.md文件并提交。

这时我们执行合并,会发现Git提示我们冲突了,执行git status可以看到冲突信息指向README.md文件。

打开README.md文件我们可以看到,Git用<<<<<<<,=======,>>>>>>>标记出了不同分支的内容。

手动修改README.md文件,再次提交,推送成功。

最后我们分别删除本地仓库分支就ok了,因为之前没有把新建的分支推送到远程仓库,远程仓库是没有刚刚我们建的branch1分支的,所以不需要删除远程分支。

关于.gitignore文件

该文件用来告诉Git哪些文件不需要添加到版本管理中。

创建方法:

在项目根目录新建一个gitignore.txt的文件,用Linux的mv命令重命名这个文件。

或者touch .gitignore直接生成.gitignore文件。

忽略规则:

  1. 空行不匹配任何内容,可以作为块分隔符
  2. #开头表示注释,如果要匹配#,可以用"\#"来匹配
  3. 如果在匹配的内容前面加 ! ,这些内容将不会被匹配

举个栗子:

# 忽略所有.txt文件,但不忽略a.txt文件
*.txt
!a.txt

# 仅忽略根目录的 a 文件夹, 但不包括子目录下的a文件夹,比如b/a是不会被忽略的
/a

# 忽略所有的a文件夹
a/

# 忽略 a/file.txt, 但不忽略 a/b/file.txt
doc/*.txt

# 忽略 a/file.txt, a/b/file.txt, a/c/file.txt...
a/**/*.txt

# add之后.gitignore修改了规则时用来回退
git reset HEAD filename
复制代码

Github关于gitignore的各种配置文件

总结

Git非常强大,我只是简单列举了一些基本功能。这篇文章的主要目的还是给和我一样平常用惯Git GUI的人入门使用。

一些有用的资料

  • 阮一峰常用Git命令清单
  • Github简明教程
  • 廖雪峰的Git教程

你可能感兴趣的:(git,运维,操作系统)