git操作指南


基本概念


Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。

Git是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。

Git与常用的版本控制工具CVS,Subversion等不同,它采用了分布式版本库的方式,不必服务器端软件支持。

个人理解,所谓分布式意味着你在本地可以多次操作(建立新分支,提交等),在批量同步到服务器上。

浅层次理解就是用Microsoft Word写文档中修修改改而且要保留之前的内容,会出现如上图令人头皮发麻的结果;

但是,理论上我们想要的是如同上图的结果,而Git就完成了这样一件事。

Git 与 SVN 区别


Git 不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等。

如果你是一个具有使用 SVN 背景的人,你需要做一定的思想转换,来适应 Git 提供的一些概念和特征。

Git 与 SVN 区别点:

  • 1、Git 是分布式的,SVN 不是:这是 Git 和其它非分布式的版本控制系统,例如 SVN,CVS 等,最核心的区别。

  • 2、Git 把内容按元数据方式存储,而 SVN 是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似 .svn、.cvs 等的文件夹里。

  • 3、Git 分支和 SVN 的分支不同:分支在 SVN 中一点都不特别,其实它就是版本库中的另外一个目录。

  • 4、Git 没有一个全局的版本号,而 SVN 有:目前为止这是跟 SVN 相比 Git 缺少的最大的一个特征。

  • 5、Git 的内容完整性要优于 SVN:Git 的内容存储使用的是 SHA-1 哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。

 

Git的配置


git的配置文件包括全局

/ etc / gitconfig用户$ HOME / .gitconfig,

用户的配置项会覆盖全局的,一般可以用如下命令初始化,否则无法提交

git config --global user.name "aresyang"
git config --global user.email aresyang@runoob.com
git config --global core.editor vim


#查看配置

git config --list 


其会建立$ HOME / .gitconfig文件,其内容为内容如下,也可以上传到github上,避免每次迁移需要输入命令。

[user]
    email = aresyang@runoob.com
    name = aresyang
[core]
    editor = vim


当账号登陆有些问题的时候,可以设置ssh -v查看ssh的输出,当然也可以变通的设置登陆的密钥。

git config core.sshCommand "ssh -v"
# git config core.sshCommand "ssh -i ~/.ssh/id_rsa -F /dev/null"

基本操作


简单的操作可以从SVN迁移过来,整体的思路是按照解决问题的角度去讲解


新建代码库

git init
git add README.md
git commit -m "README for this project."
git remote add origin git@github.com:gotgithub/helloworld.git
git push origin master

获取代码库

相当于svn中的svn co(checkout)

git clone git@github.com:google/flatbuffers.git
git clone https://github.com/google/flatbuffers.git


如上会从github上检查下flatbuffers的代码库。“git @”会要求你有ssh权限,https下如果是私有的库,则需要输入用户名和密码。

如果需要切换,可以在代码库的.git / config文件中修改url选项即可。

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    url = https://github.com/google/flatbuffers.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master


一般还可能有些文件,当前一并说明

.gitignore  # 忽略的文件列表,如vim打开的*swp文件等
.gitmodules # 说明有submodules,相当于svn中的外链 
.clang-format # 与git无关,项目配置用于调用clang-format进行格式化

常用命令

与SVN类似

git add README      # 添加文件
git status          # 当前的状态
git diff README     # 显示README文件与上次提交的差异
git rm -f <file>        # 同svn delete --force 从工作区清除
git rm --cached <file> # 从cache区域清除
git mv README readme   # 重命名

提交到本地

当经过git add的文件进行了一定修改后,我们可以先提交到本地,作为一个阶段性的成果(svn每次提交必须经过服务器)。如下就是吧README的修改提交到本地上。

git commit -m "add note to README" README.md 


在提交之前,可以git status一下,看看具体有哪些文件的修改,如果后面没有跟一个或多个文件,则git commit默认不生效。当然也可以添加-a参数,将所有修改的文件都修改。

git commit -m "first version of release" -a

合并到服务器

如果功能开发完毕,可以将本地提交的记录批量同步到服务上,这个时候需要用的推命令

git push

 


Git分支管理


git branch # 列出本地所有的branches
git branch (branchname)     # 创建分支命令
git checkout (branchname)   # 切换分支命令
git branch -d (branchname)  # 删除分支


注意新建的branch只是在本地,并没有同步到远程。例如执行如下序列,请注意观察

git branch dev_test
git checkout dev_test
echo "ReadMe" > README.md
git status --stat   # -s for short
git diff --stat     # -s for short
git commit -m "add README" README.md
# 把本地的提交到远程,如果不存在则建立 dev
git push origin dev_test:dev
git push origin --delete dev # 删除远程
git branch -d dev_test # 删除本地

解决冲突


典型问题

在本地找到'xxx'的git目录,其中包含remote:s:

说明是重新删除的问题
 git submodule删除后重新添加问题

修改 .gitmodules
修改 .git/config
删除 .git/modules

 

git简明教程:https://www.runoob.com/manual/git-guide/

Git 完整命令手册地址:http://git-scm.com/docs

PDF 版命令手册:github-git-cheat-sheet.pdf

官方翻译中文版:https://git-scm.com/book/zh/v2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值