我来记笔记啦-Git本地仓库和远程Github仓库
目录
1. Git简介
-
Git 是目前世界上最先进的分布式版本控制系统
-
Git的作用是源代码管理
-
Git的诞生
作者是 Linux 之父:Linus Benedict Torvalds
当初开发 Git 仅仅是为了辅助 Linux 内核的开发(管理源代码)
Git会在根目录下创建一个.git隐藏文件夹,作为本地代码仓库
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在修改,修改完立即commit和push - 一定要确保自己正在修改的文件是最新版本的
- 各自开发各自的模块
- 如果要修改公共文件,一定要先确认有没有人正在修改
- 下班前一定要提交代码,上班第一件事拉取最新代码
- 一定不要擅自修改同事的代码
- 养成良好的操作习惯,先
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
浙公网安备 33010602011771号