Git与GitHub

163 阅读7分钟

一:Git的起源

1.“自由主义教皇”林纳斯·托瓦兹
• Linux
• Git
2.Git是什么?
• Git是目前世界上最先进的分布式版本控制系统(没有之一)。

二:Git的使用

1.Git的安装
• Windows版的Git,从https://git-scm.com/download/win下载然后按默认选项安装即可。
• 安装完成后,右键打开菜单栏找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!

image.png

• 安装完成后,还需要最后一步设置,在命令行输入:
○ git config --global user.name "Your Name" 
○ git config --global user.email "email@example.com" 
○ git config user.name 查看配置的姓名
○ git config user.email 查看配置的邮箱
○ 因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。
2. Linux的命令
    • mkdir xxx 新建文件夹
    • vi x.txt 新建文件(Visual editor)
            ○ 输入 i 进入vi编辑器模式
            ○ ESC + :+ wq 保存并退出
    • cd xxx 进入xxx目录
    • cd .. 返回上一级目录
    • ls 列出当前文件夹中所有文件
    • pwd 显示当前目录
    • cat x.txt 显示文件内容
    • clear 清屏
3. 创建版本库
1)git init // 初始化版本库
    • 创建成功会提示 Initialized empty Git repository in c:/Users/xx/Desktop/0725git/.git/
    • 没有初始化执行git命令,会提示fatal: Not a git repository (or any of the parent directories): .git		
    • 你还会发现目录上多出一个.git的文件夹,这个文件夹是Git来跟踪管理版本库的,不要去修改这个文件里的内容。
	
2)git add x.txt // 添加指定文件到仓库中
    • 不会有任何提示,但是提交成功了
    • 失败会提示fatal: pathspec 'x.txt' did not match any files
    • 可能会出现警告,由于linux和window的换行符不一致导致的。
		○ 警告内容:warning: LF will be replaced by CRLF in a.txt. 
		○ 解决方式:git config --global core.autocrlf false 
        
3)怎么查看有没有添加成功呢?
    • git status 红色表示在工作区,绿色表示在暂存区
    
4)git commit -m 'xxx' // 提交所有文件
    • 提交成功会提示:										[master (root-commit) 88bbb64] first commit
	 	1 file changed, 2 insertions(+)
	 	create mode 100644 x.txt
    • 如果只输入git commit会出问题,ESC + :+ wq 退出就好
4. 理解工作区+版本区+暂存区
• 工作区(working Directory):简单的理解你在电脑里能看到的目录。
• 版本库(Repository):工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
	○ 暂存区(stage):Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
	○ 第一步是用git add把文件添加进去,实际上就是将工作区文件添加到暂存区
	○ 第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支(版本库)
	○ git checkout -- . 舍弃本地的所有更改(未git add,就算add了也可以通过这个命令舍弃吧)

image.png

5. 差异对比
 git diff : 比较工作区与暂存区
 git diff --cached : 比较暂存区与版本区
 git diff master : 比较工作区与版本区
6. 日志+版本号
• git log 显示从最近到最远的所有提交日志
• git reflog 显示每次提交(commit)的commit id
7. 版本回退+版本穿梭+版本撤销
• git reset --hard HEAD^ 版本回退(回退一次提交)
• git reset --hard Obfafd 回退到指定Obfafd的commit id版本
• git reset HEAD 将暂存区的目录树重写为HEAD指向的版本库中的目录树
• git checkout -- x.txt 将暂存区指定的文件替换工作区的文件(危险)
• git checkout HEAD x.txt 将HEAD指向的版本库中的文件替换暂存区和工作区的文件(危险)
• git rm --cached x.txt 从暂存区删除文件
8. 删除文件
• git rm x.txt 删除文件backgroundbackground
• git rm -r x.txt 删除文件夹
9. 分支
• git checkout -b dev 创建dev分支,并切换到dev分支
• git checkout master 切换分支
• git merge dev 合并指定dev分支到当前分支
• git branch -d dev 删除指定分支
• git branch 查看当前分支
• git diff branch1 branch2 显示出两个分支之间所有有差异的文件的详细差异
• git diff branch1 branch2 --stat 显示出两个分支之间所有有差异的文件列表
• git diff branch1 branch2 文件名(带路径) 显示指定文件的详细差异
10. 版本冲突
• 合并分支时,如果在同一个文件,在同一个地方,都修改了或新增内容会引起版本冲突。
• 解决版本冲突最好办法是手动解决,去文件里直接修改。

三:版本控制系统的区别

1. 集中式版本控制系统
代表有SVN、CVS
集中式版本控制系统,版本库是集中存放在中央服务器的,每个开发人员电脑里只有其中一个版本。
2. 分布式版本控制系统
代表有Git、BitKeeper
每个开发人员电脑里都有一个完整的版本库。同时,它也需要一台充当“中央服务器”的电脑,来方便“交换”大家的代码修改。
3. 集中式与分布式的区别
类别/项目集中式版本控制系统分布式版本控制系统
主要区别每个开发者只有应用代码库的一个版本。 在离线状态下开发者无法进行版本管理开发。每个开发者都有整个代码库的所有版本。在离线状态下开发者可以进行版本管理开发, 等到有网时再push到仓库中。
交互模型图1图2

图1:image.png

图2:image.png

四:GitHub

1.GitHub是什么?
• GitHub是一个Git项目托管网站,主要提供基于Git的版本托管服务。
2.GitHub能干嘛?
• 能够分享你的代码或者其他开发人员配合一起开发。
• GitHub是一个基于Git的代码托管平台,Git并不像SVN那样有一个中心服务器。目前我们使用到的Git命令都是在本地执行,你就需要将数据放到一台其他开发人员能够连接的服务器上。
3.GitHub怎么使用?
• https://github.com/
4.GitHub远程仓库的使用

4.1. 本地仓库内容要推送到远程仓库

  • 新建本地仓库
git init
git add .
git commit -m “first commit”
  • 新建远程仓库(GitHub上New repository)
  • 本地仓库和远程仓库进行关联
git remote add origin https://github.com/xpromise/oa.git (HTTPS)
  • 把本地仓库内容推送到远程仓库中
git push -u origin master (首次)

由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送到远程新的master分支,还会把本地master分支和远程的master分支关联起来,在以后的推送或者拉取时可以简化命令git push origin master。

4.2. 远程仓库有内容克隆到本地进行开发

  • 新建本地仓库
git init
git add .
git commit -m “first commit”
  • 克隆远程仓库到本地
git clone https://github.com/xxx.git  // (HTTPS)

4.3. 本地有内容,远程有内容,更新不同的内容

git pull origin master // 将远程仓库拉到本地来
5.配置SSH与使用
• 输入cd ~/.ssh,由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以我们需要配置验证信息。
	○ No such file or directory 表示第一次
• 创建SSH Key:ssh-keygen -t rsa -C "xxx@xxx.com" 然后按3次enter键
	○ 它会在~/下生成.ssh文件夹,进去打开id_rsa.pub文件复制里面全部的内容
	○ 将其复制到你的GitHub里的SSH keys中
• 测试连通性:ssh -T git@github.com
• 使用
	○ git remote add origin git@github.com:xpromise/oa.git	 (SSH)
	○ git clone git@github.com:xpromise/oa.git	 (SSH)
6.GitHub其他功能

6.1. Fork

image.png 将别人的项目clone一份,但是owner变成自己,这样你就可以在遵守open source license(许可协议)的前提下任意修改这个项目了。 相当于你在原项目的主分支上又建立了一个分支,你可以在该分支上任意修改如果想将你得修改合并到原项目中式,可以pull request,这样原项目的作者就可以将你修改的东西合并到原项目的主分支上去,这样你就为开源项目贡献了代码,开源项目就会在大家的努力下不断地壮大和完善。 6.2. GitHub Pages

  • 推送本地代码到GitHub仓库
    • 创建本地仓库
      § git init
      § git add .
      § git commit -m "xxx" 
      
    • 创建GitHub远程仓库
    • 本地仓库关联远程仓库
      § git remote add origin git@github.com:xpromise/jd.git
      
    • 推送本地更新
      § git push -u origin master
      
  • 配置GitHub Pages选项

6.3. 博客

五:码云

代码管理平台,类似GitHub。

六:sourceTree

代码管理的桌面工具。

1、 sourceTree的安装

2、 sourceTree的基本使用