Git
Git简介
Git 与 SVN版本控制器区别
git是分布式的版本控制系统,svn是集中式的版本控制系统
集中式与分布式区别:
你的本地是否有完整的版本库历史!
假设SVN服务器没了,那你丢掉了所有历史信息,因为你的本地只有当前版本以及部分历史信息。
假设GitHub服务器没了,你不会丢掉任何git历史信息,因为你的本地有完整的版本库信息。你可以把本地的git库重新上传到另外的git服务商。
安装Git
# ubuntu安装git
sudo apt install git
配置用户信息
git config --global user.name "Your Name"
git config --global user.email "email@example.com"
"--global:配置全局。即这台机器所有的Git仓库都会使用这个配置"
创建版本库
版本库:repository。可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
# 创建一个空目录作为版本库
cd ~
mkdir learngit
cd learngit
# 将这个目录变成Git可以管理的仓库
git init
"新增的`.git`目录是Git来根曾管理版本库的。默认是隐藏的,可以通过`ls -a`查看"
添加文件到仓库
# 创建文件,写入内容
vim readme.txt
# 文件添加到仓库
git add readme.txt
# 文件提交到仓库
git commit -m "wrote a readme file"
" 使用命令git add <file>,注意,可反复多次使用,添加多个文件;使用命令git commit -m <message>,完成。"
时光机穿梭
# 修改文件内容
vim readme.txt
# 查看仓库当前的状态
git status
# 查看修改内容
git diff
# 文件添加到仓库
git add readme.txt
# 查看仓库当前的状态
git status
# 文件提交到仓库
git commit -m "add distributed"
# 查看仓库当前的状态
git status
版本回退
# 修改文件内容
vim readme.txt
# 文件添加到仓库
git add readme.txt
# 文件提交到仓库
git commit -m "append GPL"
# 查看提交历史
git log --pretty=oneline
"--pretty=oneline 每行显示一条commit"
# 回退到上一个版本
git reset --hard HEAD^
"Git中,HEAD代表当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^"
# 回退到指定版本
git reset --hard <commit id前几位>
# 查看命令历史
git reflog
工作区和暂存区
工作区:电脑里看到的目录,如learngit。
版本库:工作区中有一个隐藏目录.git,这个是Git的版本库。其中包含暂存区与分支
git add:把提交的所有修改放到暂存区
git commit:一次性把暂存区的所有修改提交到分支
管理修改
每次文件的修改,如果不 git add 到暂存区,就不会加入到 commit 中
撤销修改
## 撤回工作区的文件
vim readme.txt
# 丢弃工作区的修改
git checkout -- readme.txt
## 撤回提交到暂存区的文件
vim readme.txt
git add readme.txt
# 暂存区的修改回退到工作区
git reset HEAD readme.txt
# 丢弃工作区的修改
git checkout -- readme.txt
## 撤回提交到版本库的文件
git reset --hard HEAD^
删除文件
vim test.txt
git add test.txt
rm test.txt
git status
# 版本库中删除文件
git rm test.txt
git commit -m "remove test.txt"
vim test.txt
git add test.txt
rm test.txt
git status
# 恢复误删的文件
git checkout -- test.txt
"git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。"
远程仓库
# 创建SSH Key
~目录中查找是否有.ssh目录。id_rsa:私钥 id_rsa.pub:公钥
ssh-keygen -t rsa -C "youreamil@example"
# GitHub配置
添加远程库
# 添加远程库
git remote add origin git@github.com:qingxuly/learngit.git
# 本地仓库推送到远程库上
git push -u origin master
"-u:Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。"
# 把本地master分支的最新修改推送至GitHub
git push origin master
# 查看远程库信息
git remote -v
# 删除orign,只是解除了本地和远程的绑定关系
git remove rm origin
从远程库克隆
登陆GitHub,创建新的仓库gitskills
# 克隆一个本地库
git clone git@github.com:qingxuly/gitskills.git
分支管理
标签管理
SVN
SVN简介
SVN概念
repository(源代码库):源代码统一存放的地方
Checkout(提取):当你手上没有源代码的时候,你需要从repository checkout一份
Commit(提交):当你已经修改了代码,你就需要Commit到repository
Update (更新):当你已经Checkout了一份源代码, Update一下你就可以和Repository上的源代码同步,你手上的代码就会有最新的变更
安装SVN
# ubuntu安装git
sudo apt install apt-get install subversion
SVN使用
# 文件checkout到本地目录
svn checkout svn_path local_path
# 版本库中添加新的文件
svn add file
# 改动的文件提交到版本库
svn commit -m "message" [-N] [--no-unlock] PATH
# 加锁/解锁
svn lock -m "message" [--force] PATH
svn unlock PATH
# 更新版本
svn update -r m PATH
svn update # 更新到最新版本
svn -r 200 test.php # 将文件还原到历史版本200
svn update test.php # 文件更新到最新版本
# 查看文件或者目录状态
svn status PATH
"显示文件及子目录的状态,正常不显示"
"? 不在svn的控制中 M 内容被修改 C 发生冲突 A 预订加入到版本库 K 被锁定"
# 删除文件
svn delete PATH -m "注释内容"
svn delete test.php + svn ci -m "message" (推荐)
# 查看日志
svn log PATH
# 查看文件详细信息
svn info PATH # 将修改的文件与仓库中最新版本比较
svn diff -r m:n PATH # 版本之间对比
# 将两个版本之间的差异合并到当前文件
svn merge -r m:n path # 一般会产生冲突,需要处理一下
# 版本库中添加文件夹
svn mkdir PATH
# 代码库URL变更
svn switch # 更新工作副本到不同的URL
# https://www.cnblogs.com/dabaopku/archive/2011/05/21/2052820.html
# 解决冲突
svn resolved # 移除工作副本的目录或文件的“冲突”状态