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时光机穿梭,注意,可反复多次使用,添加多个文件;使用命令git commit -m ,完成。"
# 修改文件内容 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工作区和暂存区 # 查看命令历史 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 subversionSVN使用
# 文件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 # 移除工作副本的目录或文件的“冲突”状态



