[Git和SVN比较]_[初级]_[Git速查手册]

来源:互联网 发布:管家婆网络远程软件 编辑:程序博客网 时间:2024/06/05 22:42

场景

1.使用SVN的都知道, SVN是集中化的版本控制系统. 本地只存储最新的版本快照, 不能查看整个库的历史记录; 修改代码过后, 如果需要提交代码到中心仓库,是需要联网的; 如果别人更快的提交, 那么必须先update之后解决冲突才可以提交, 相当麻烦.

说明

下边比较Svn(集中化版本控制) 和 Git(分布式版本控制)的优缺点:

Svn

特性

1.只存储某个个版本的快照.

2.是以数值为版本号.

这里写图片描述

优点

1.每个人都可以在一定程度上看到项目中的其他人在做什么.

2.管理员可以轻松掌控每个开发人员的权限.(特别是对源码控制要求比较高的公司)

缺点

1.如果中央服务器单点故障, 那么任何一个客户端都无法提交更新, 也就无法协同工作.

2.如果中心数据库的磁盘发生损坏, 又没做备份, 那么会丢失整所有数据,包括变更历史, 如果有一个SVN里的中心数据文件损坏, 那么导致这个存储文件对应的记录或文件无法恢复, 严重的整个SVN库都因此报废.

3.本地开发时完成如果连不上代码仓库, 那么某个功能想提交保存又提交不了,做新功能时又担心覆盖或影响之前的功能,束手束脚(效率低,慢,容易出错). 提交失败时还得先打包备份。防止Update时不小心merge错误.

Git

特性

1.存储整个个仓库的镜像, 并不是某个快照.

2.git的文件存在3种状态: 已修改(modified)和已暂存(staged),已提交(committed)

3.是以sha1为版本号.

这里写图片描述

优点

1.客户端不只是提取最新版本的文件快照, 而是把代码仓库完整的Clone(镜像)下来.

2.中心服务器如果发生故障,可以用任何一个客户端的本地仓库进行恢复.

3.多阶段提交, 比如项目C=A+B, A=A1+A2+A3, 这样一个大项目可以分成足够细的子项目协同开发而不受影响.

4.基本所有的操作和提交都可以在本地执行提交而不受其他人影响,这样能保护代码不小心被还原或删除造成的变更丢失, 是个很好的功能. 它是先提交到本地的仓库(快速),之后再push到远程, 只有在push时才有可能发生冲突. 这时候解决冲突其实已经安全很多, 因为你自己的修改已经提交到本地.

缺点

1.权限控制相当麻烦, 默认没有对一个项目的权限控制.

常用操作

获取仓库

第一种:克隆仓库

git clone https://github.com/libgit2/libgit2 .

第二种:在现有目录初始化仓库
进入该项目目录-> git init

配置git

1.进入项目目录设置 user.name和 user.email, 设置编辑这个项目的用户名和email.全局的会在/etc/gitconfig 与
~/.gitconfig 里设置, 如果是某个项目的是在该项目的.git/config文件里.

git config [--global] user.name "Sam"git config [--global] user.email "Sam@gmail.com"

2.检测配置

git config list

3.获取帮助

git help <verb>git <verb> helpman git <verb>

操作git

1.查看当前文件状态

git status [-s]

2.添加一个跟踪文件

git add <file>

3.添加忽略, 比如pyc文件不提交, 全局的在 ~/.gitignore 文件里. 项目的在.git/info/exclude文件.
– 所有空行或者以 # 开头的行都会被 Git 忽略。
– 可以使用标准的 glob 模式匹配。
– 匹配模式可以以(/)开头防止递归。
– 匹配模式可以以(/)结尾指定目录。
– 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。

4.查看尚未暂存的文件更新了哪些部分

git diff

5.提交更新到本地

git commit -m "描述"

6.删除文件

git rm <file>

7.移动文件

git mv <file_from> <file_to>

8.查看提交历史,一个常用的选项是 -p,用来显示每次提交的内容差异。你也可以加上 -2 来仅显示最近两次提交

git log [-p -2]

9.撤销操作, 比如一次提交漏掉了某个文件或注释写错.

git commit -m 'initial commit'git add forgotten_filegit commit --amend

10.取消暂存的文件

git reset HEAD CONTRIBUTING.md

11.撤销(放弃)对文件的修改

git checkout -- CONTRIBUTING.md

12.显示需要读写远程仓库使用的 Git 保存的简写与其对应的 URL

git remote -v

13.添加远程仓库

git remote add <shortname> <url>git remote add pb https://github.com/paulboone/ticgit

14.从远程仓库中抓取与拉取

git fetch [remote-name]

15.推送到远程仓库

git push [remote-name] [branch-name]git push origin master

16.查看远程仓库信息

git remote show origin

17.列出标签

git taggit tag -l 'v1.8.5*' (过滤标签)

18.创建标签
Git 使用两种主要类型的标签:轻量标签(lightweight)与附注标签(annotated)。
一个轻量标签很像一个不会改变的分支 - 它只是一个特定提交的引用。
然而,附注标签是存储在 Git 数据库中的一个完整对象。它们是可以被校验的;其中包含打标签者的名字、电子
邮件地址、日期时间;还有一个标签信息;并且可以使用 GNU Privacy Guard

– 附注标签

git tag -a v1.4 -m 'my version 1.4'git show v1.4 (显示标签信息)

– 轻量标签

git tag v1.4

– 后期打标签, 对某个历史打标签,你需要在命令的末尾指定提交的校验和(或部分校验和)

git log  (显示历史)git tag -a v1.2 9fceb02

– 共享标签,默认情况下 git push 不会传送标签到远程仓库服务器上.

git push origin [tagname]git push origin --tags (所有远程仓库不在的标签提交)

– 检出标签

git checkout -b [branchname] [tagname]

19.存储提交的email和密码

git config credential.helper storegit push origin master


会自动保存到 ~/.git-credentials, 下次提交不会再输入,缺点是明文的. 不建议使用.

最后补充下开源项目还是用github吧, code.csdn.net都用不了了还要迁移到码云,关键是码云还不能搜代码片段, 没什么意义. 自己写的博客备份工具会迁移到github.

参考

Pro Git 中文
is-there-a-way-to-make-git-remember-the-password-for-webdav-remotes
git-credential-store

原创粉丝点击