Git与SVN的安装配置
Git与SVN的安装配置
Git
- 官网下载对应的安装包无脑下一步安装完毕
- 基础配置:
## 用户信息
git config --global user.name "eaaomk"
git config --global user.email eaaomk@163.com
git remote add origin https://gitee.com/serendipity-z/blognext.git
git push -u origin "master"
## 设置文本编辑器 Vim 或者 emacs
git config --global core.editor emacs
## 差异分析工具
git config --global merge.tool vimdiff
## 查看配置信息
vim ~/.gitconfig
git config --list
- 常用命令:
命令 | 说明 |
---|---|
git init | 初始化仓库。 |
git add . | 添加文件到暂存区。 |
git commit | 将暂存区内容添加到仓库中。 |
创建仓库命令 | |
git init | 初始化仓库 |
git clone | 拷贝一份远程仓库,也就是下载一个项目。 |
提交与修改 | |
git add | 添加文件到暂存区 |
git status | 查看仓库当前的状态,显示有变更的文件。 |
git diff | 比较文件的不同,即暂存区和工作区的差异。 |
git commit | 提交暂存区到本地仓库。 |
git reset | 回退版本。 |
git rm | 将文件从暂存区和工作区中删除。 |
git mv | 移动或重命名工作区文件。 |
提交日志 | |
git log | 查看历史提交记录 |
git blame (file) | 以列表形式查看指定文件的历史修改记录 |
远程操作 | |
git remote | 远程仓库操作 |
git fetch | 从远程获取代码库 |
git pull | 下载远程代码并合并 |
git push | 上传远程代码并合并 |
git branch (branchname) | 查看分支,创建新分支 |
git checkout (branchname) | 切换分支 |
git merge | 合并分支 |
git clean -df | 删除本地新增文件 |
git checkout . | 删除本地修改 |
git rebase | 重置索引head的指向 |
git branch -vv | 查看分支信息 |
git branch -d (branchname) | 删除指定分支 |
git brnach -b (branchname) | 创建新分支并切换到此新分支上 |
git commit -m "" | 附带提交信息的提交 |
git commit --amend | 追加提交 |
git reset HEAD^ | 回退上一次提交 |
- linux上简化命令操作
#!/bin/bash
#####################
### Author: eaaomk
### blog: https://eaaomk.github.io/blog/
### des: 执行此脚本,将下列快捷命令书写到linux 下的
### .bashrc(root用户)文件中,.bash_profile是非管理员用户会走的路径
#####################
thisecho(){
echo '
echo "---bash profile====="
source ~/.bashrc
ap(){
# Automatic push
value=`git rev-parse --abbrev-ref --symbolic-full-name @{u}`
if [ -z "$value" ]
then
echo -e "\e[1;31m push to the default branch \e[0m"
temp=`git branch -r | grep m/master`
real_url=${temp#*->}
else
real_url=$value
echo -e "\e[1;31m current branch is ${real_url} \e[0m"
fi
git push origin HEAD:refs/for/${real_url#*/}
}
acp(){
# Automatic commit and push
ac
ap
}
ac(){
# Automatic commit
read -p "BUG ID: " msg1
read -p "DESCRIPTION: " msg2
echo "
BUG ID:$msg1
DESCRIPTION:$msg2" | git commit -F-
}
'>> ~/.bash_profile
sync
source ~/.bash_profile
}
thisecho
SVN
SVN是版本控制工具,安装步骤:
步骤01 在本机上安装TortoiseSVN。首先下载TortoiseSVN安装包,然后在安装时选择command line client tools,这样安装后在bin目录下才能找到命令行工具svn.exe。
步骤02 在Android Studio中配置TortoiseSVN的命令行工具。打开Android Studio,依次选择菜单File→Settings→Version Control→Subversion→user command line client,单击右侧的浏览按钮,选择本地安装的svn.exe的完整路径。
步骤03 在Android Studio中使用SVN检出项目。打开Android Studio,依次选择菜单VCS→Checkout from Version Control→Subversion,单击Repositories右方的加号按钮,在弹出的小窗口中输入SVN仓库地址,单击OK按钮,回到原窗口单击Checkout按钮,把项目检出到本地目录。
这里更推荐Git 工具
Git与SVN的不同
Git是分布式的,SVN是集中式的
SVN必须有一个服务器版本库就放在一个中央服务器。所有开发人员都是与服务器进行交互的。
Git更倾向于分布式开发,每台计算机上都有一个完整的本地版本库,和服务器上的一模一样。所以即使没有网络也一样可以Commit,查看历史版本记录,创建项 目分支等操作。也有中心服务器,仅仅是为了方便交换大家的修改。
去中心化的好处?
操作处理速度快
安全性更高。Git每个人的电脑都有完整的版本库,SVN集中式版本控制的中央服务器要是出了问题,所有人都没法干活了,一次需要定期备份,并且是整个SVN都得备份
不依赖网络
Git把内容按元数据方式存储,而SVN是按文件
SVN保存前后变化的差异数据
Git只关心文件数据的整体发生变化,更像是把文件做快照,文件没有改变时,分支只想这个文件的指针不会改变,文件发生改变,指针指向新版本
Git没有一个全局版本号,而SVN有
SVN版本号进行控制,每次操作都会产生一个高版本号
Git采用40 位长的哈希值作为版本号,没有先后之分
Git的内容的完整性要优于SVN
GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏
分支不同
Svn 创建分支,其实就是创建了一个新的文件夹(目录)并拥有实际的文件的。相当于拷贝了一份源文件。创建完分支后,影响全部成员,每个人都会拥有这个分支。拉分支相当于copy时间较慢。多分支并行开发较重。
Git可以在任意一个提交点(commit point)开启分支,并没有创建文件夹,你甚至看不到任何的改变。创建一个分支,就是多了一个索引文件,记录这个分支的变化,占用很小的空间。拉分支时间较快,拉分支只是创建文件的指针和HEAD。用户可以在同一个文件夹中,快速的切换不同的分支。每个分支,都是独立的,在这个分支里想做什么都可以,对其他分支没有一点影响。比较适合多分支并行开发。
管理权限不同
svn的权限管理相当严格,可以按组、个人针对某个子目录的权限控制
Git没有严格的权限管理控制,只有账号角色划分
工作流程不同
SVN每次更改文件之前都得update操作,有冲突,会打断提交动作
Git开始工作前进行fetch操作,完成开发工作后push操作,有冲突解决冲突。git的提交过程不会被打断,有冲突会标记冲突文件
Git与SVN对比
作用 | git | svn |
---|---|---|
版本库初始化 | git init | svn create |
clone | git clone | svn co(checkout) |
add | git add (.除去.gitignore,*所有的文件) | svn add |
commit | git commit | svn commit |
pull | git pull | svn update |
push | git push | - |
查看工作状态 | git status | svn status |
创建分支 | git branch <分支名> | svn cp <分支名> |
删除分支 | git branch -d <分支名> | svn rm <分支名> |
分支合并 | git merge <分支名> | svn merge <分支名> |
工作区差异 | git differ (-cached / head) | svn diff |
更新至历史版本 | git checkout commit | svn update -r rev |
切换tag | git checkout tag | svn switch tag |
切换分支 | git checkout branch | svn switch branch |
还原文件 | git checkout - path | svn revert path |
删除文件 | git rm path | svn rm path |
移动文件 | git mv path | svn mv path |
清除未追踪文件 | git clean | svn status sed -e |