我来记笔记啦-Git本地仓库和远程Github仓库

1. Git简介

  • Git 是目前世界上最早进的分布式版本控制系统git

  • Git的做用是源代码管理github

  • Git的诞生shell

做者是 Linux 之父:Linus Benedict Torvaldsvim

当初开发 Git 仅仅是为了辅助 Linux 内核的开发(管理源代码)服务器

Git会在根目录下建立一个.git隐藏文件夹,做为本地代码仓库ssh

Git操做流程:
Git服务器(拉取代码) --> 本地仓库 --> 客户端(提交) --> 本地仓库 --> Git服务器

2. 工做区暂存区和仓库区

  • 工做区

对于添加修改删除文件的操做,都发生在工做区中分布式

  • 暂存区

暂存区指将工做区中的操做完成小阶段的存储,是版本库的一部分测试

  • 仓库区

仓库区表示我的开发的一个小阶段的完成,仓库区中记录的各版本是能够查看并回退的网站

可是在暂存区的版本一旦提交就再也没有了。版本控制

3. Git单人本地仓库

# 安装git
 sudo apt-get install git
 
 # 查看安装版本
 git --version
 
 # 建立本地仓库,会在建立仓库目录下生成.git目录
 cd $HOME/gittest/
 git init   --初始化本地仓库
 
 # 配置我的信息,会记录在.git目录下config
  git config user.name '张三'
  git config user.email 'zhangsan@163.com'
  
  # 新建文件,查看文件状态
  git status   --新建文件在工做区
  
  # 添加项目中全部文件
  git add .
  或者
  # 添加指定文件
  git add login.txt  --添加后文件在暂存区
  
  # 提交到仓库区
  git commit -m '版本描述'
  
  # 若是文件修改可用添加和提交合并命令
  git commit -am "版本描述"
  
  # 查看历史版本
  git log
  或者
  git reflog
  
  注意:git reflog 能够查看全部分支的全部操做记录(包括commit和reset的操做),包括已经被删除的commit记录,git log 则不能察看已经删除了的commit记录

4. 回退版本

# 查看版本
git refog

# 回退到最新版本的前一个版本
git reset --hard HEAD^

# 回退到以前具体的一个版本
git reset --hard 版本号
  • HEAD表示当前最新版本
  • HEAD^表示当前最新版本的前一个版本
  • HEAD^^表示当前最新版本的前两个版本,以此类推...
  • HEAD~1表示当前最新版本的前一个版本
  • HEAD~10表示当前最新版本的前10个版本,以此类推...

5. 撤销修改

  • 只能撤销工做区、暂存区的代码,不能撤销仓库区的代码
  • 撤销仓库区的代码就至关于回退版本操做

5.1 撤销工做区代码

# 只修改了内容没有add添加
git checkout 文件名   --至关于同步了git服务器的代码

5.2 撤销暂存区代码

  • 修改了文件内容,并add到暂存区
# 第一步:将暂存区代码撤销到工做区
git reset HEAD  文件名
# 第二步:撤销工做区代码
git checkout 文件名

6. Git远程仓库Github

6.1建立远程仓库

  • Github网站上建立远程仓库

Github网站上注册一个用户并建立一个测试项目。

Github网址: https://github.com/

# 点击code下选择https网址进行复制
例如:
https://github.com/ceshi/info.git

6.2 配置远程仓库SSH

# 配置全局git配置文件路径:~/.gitconfig
vim ~/.gitconfig    --写入如下内容设置name和email
[user]
name = ceshi
email = 747479317@qq.com
解释:
name 是github用户名
email 是github注册时的邮箱

# 或者使用如下命令设置name和email
cd $HOME
git config --global user.name "github用户名"
git config --global user.email "github注册时的邮箱"

# 查看是否设置成功
git config --global --list 

# 生成ssh key秘钥
ssh-keygen -t rsa -C "github注册时的邮箱"
执行后一直回车,出现选择时输入Y,而后一直回车到最后。

# 生成秘钥文件, 复制文件内的内容即为key值
cat ~/.ssh/id_rsa

# 登录github选择 Settings --> SSH and GPG keys --> new SSH key
- Title   --随便写一个名字
- Key     --粘贴上面生成的key值
点击 Add SSH key 添加一个key值

6.3 克隆项目

  • 准备经理的文件 $HOME/manager/
  • 准备张三的文件 $HOME/zhangsan/

经理的工做

  • 立项:克隆远程仓库+配置身份信息+建立项目+推送项目到远程仓库

  • 1.克隆远程仓库的命令

    cd $HOME/manager/
    
     # 克隆远程仓库到本地,网址为6.1复制的github建立的测试仓库网址
     git clone https://github.com/ceshi/info.git
  • 2.配置经理身份信息

cd $HOME/manager/info
  git config user.name '经理'
  git config user.email 'manager@163.com'
  • 3.建立项目
cd $HOME/manager/info
  mkdir test
  vim test/ceshi.py   --写一个测试文件
  • 4.推送项目到远程仓库
# 工做区添加到暂存区
  git add .
  # 暂存区提交到仓库区
  git commit -m '立项'
  # 推送到github远程仓库
  git push
  
  此时test/ceshi.py这个项目文件就推送到github测试项目上了。
  • 5.设置推送到github密码有效期
# 每次 push 都须要输入github帐号与密码
# 设置记住密码(默认15分钟):
git config --global credential.helper cache
# 若是想本身设置时间,能够这样作(1小时后失效):
git config credential.helper 'cache --timeout=3600'
# 长期存储密码:
git config --global credential.helper store

张三的工做

  • 获取项目:克隆项目到本地、配置身份信息

  • 1.克隆项目到本地

    cd $HOME/zhangsan/info
    # 克隆远程仓库到本地,网址为6.1复制的github建立的测试仓库网址
    git clone https://github.com/ceshi/info.git
  • 2.配置张三身份信息

cd $HOME/zhangsan/info
 git config user.name '张三'
 git config user.email 'zhangsan@163.com'

6.4 多人协同开发

  • 经理修改测试项目
cd $HOME/manager/info
# 修改测试文件
vim test/ceshi.py   

# 将修改提交到本地仓库区
git commit -am '经理修改1'

# 将本地仓库区代码推送到远程仓库
git push
  • 张三修改测试项目
cd $HOME/zhangsan/info

# 从远程仓库同步代码
git pull

# 修改测试文件
vim test/ceshi.py   

# 将修改提交到本地仓库区
git commit -am '张三修改1'

# 将本地仓库区代码推送到远程仓库
git push

这样就实现了张三和经理协同开发

总结

  • 要使用git命令操做仓库,须要进入到仓库内部
  • 要同步服务器代码就执行:git pull
  • 本地仓库记录版本就执行:git commit -am '版本描述'
  • 推送代码到服务器就执行:git push
  • 编辑代码前要先pull,编辑完再commit,最后推送是push

6.5 解决代码冲突

  • 经理修改测试项目
cd $HOME/manager/info
# 修改测试文件
vim test/ceshi.py   

# 将修改提交到本地仓库区
git commit -am '经理修改2'

# 将本地仓库区代码推送到远程仓库
git push
  • 张三修改测试项目
cd $HOME/zhangsan/info

# 直接修改测试文件,没有git pull从远程服务器拉取文件
vim test/ceshi.py   

# 将修改提交到本地仓库区
git commit -am '张三修改2'

# 将本地仓库区代码推送到远程仓库
git push    --报错提示须要先pull

# pull时提示有文件冲突(张三的本地仓库内有文件跟远程仓库有冲突)
git pull     --从远程仓库拉取文件时报错有冲突
  • 解决冲突
# 此时冲突就产生了,须要修改ceshi.py文件解决冲突 

# 方案:保留全部代码 或者 保留某一人代码
vim test/ceshi.py 

# 解决完冲突代码后,依然须要add、commit、push
  • 容易冲突的操做方式
    • 多我的同时操做了同一个文件
    • 一我的一直写不提交
    • 修改以前不更新最新代码
    • 提交以前不更新最新代码
    • 擅自修改同事代码
  • 减小冲突的操做方式
    • 养成良好的操做习惯,先pull在修改,修改完当即commitpush
    • 必定要确保本身正在修改的文件是最新版本的
    • 各自开发各自的模块
    • 若是要修改公共文件,必定要先确认有没有人正在修改
    • 下班前必定要提交代码,上班第一件事拉取最新代码
    • 必定不要擅自修改同事的代码

6.6 标签

  • 当某一个大版本完成以后,须要打一个标签

  • 做用:

    • 记录大版本
    • 备份大版本代码
  • 经理打标签

cd $HOME/manager/info

# 打本地仓库v1.0版本
git tag -a 标签名 -m '标签描述'
例:
git tag -a v1.0 -m 'version 1.0'
 
# 经理推送标签到远程仓库
git push origin 标签名
例:
git push origin v1.0
  • 删除本地和远程标签
# 删除本地标签
git tag -d 标签名

# 删除远程仓库标签
git push origin --delete tag 标签名

6.6 分支

分支做用

  • 区分生产环境代码以及开发环境代码
  • 研究新的功能或者攻关难题
  • 解决线上bug

1. 经理建立新分支

cd $HOME/manager/info/

# 查看当前分支
git branch

# 建立并切换到dev分支
git checkout -b dev

# 设置本地分支跟踪远程指定分支(将分支推送到远程)
git push -u origin dev

2. 经理在dev分支开发新程序

cd $HOME/manager/info

# 查看当前文件状态
git status

# 从远程仓库同步文件
git pull

# 修改测试文件1
vim test/ceshi1.py   

# 将修改提交到本地仓库区
git commit -am '经理修改3'

# 将本地仓库区代码推送到远程仓库
git push

3. 分支合并

# 切换到原分支
git checkout master

# 将dev分支代码合并到master(合并分支默认在本地仓库完成)
git merge dev

# 经理推送合并分支操做到远程仓库
git push

4. 张三同步合并和的分支代码

cd $HOME/zhangsan/info/

# 查看当前分支
git branch

# 在master分支,从服务器拉取合并分支后的代码
git pull
相关文章
相关标签/搜索