1. 我只会用git clone, 从github上下点代码
git 大名鼎鼎,但我svn一直用得好好的,足可应付. 公司的svn服务器是我架设的,权限也是我分配的,svn用的很熟,所以一直没有认真学习git.
但是偶尔会从github 上下点代码. 命令行方式是用git clone, 就这么多了,再无其它了.
曾经记得公司组织过学习git操作,泛泛而谈,没认真对待.
2. git 有一个巨大的,免费的存储空间,代码库,这是它的优势之一.
集中式因占用cpu资源无法构造如此庞大数据库.
终于,我也想用github 了,因为我想在上边存点代码.
我用业余时间学习了一点内核知识,这代码环境,放到本机容易丢失,放到公司服务器也不合适,放到github上是最合理的了,同道人也可以走点近路,我们也应该为github做点贡献
我翻阅了一下github主页learn git and github without any code. 按其指南只点了几下鼠标确实生成了一个Hello World.
到此我知道我也可以建立网上仓库,上传代码了,至于后面的
创建一个分支
生成一个提交
打开一个Pull Request
合并一个Pull Request,
后面慢慢再说.
3. git脱离服务器它仍然可以独立运行,这是它的优势之二.
本地代码维护和向网络提交代码
既然都是版本管理软件,功能应该都类似.
但svn是集中式版本控制软件,git是分布式版本控制软件,用法上还是稍有差别.
分布式说得太专业,通俗点讲,分布式是脱离服务器它仍然可以独立运行,这是它的优势之二.
在局部网下优势不明显,但当你把笔记本带到家时就不一样啦.
当断网后,
svn info: 显示仓库地址,仓库版本号
svn status: 显示当前版本状态,哪些文件已修改
有些不用联网的命令还可以使用
但svn up, svn log, svn diff,等等都不能使用了,需要与服务器相连,更不用说svn ci 了.
而git 不受影响(当然不能向服务器推拉了)
本地常用命令,
git status
git add
git commit
git rm
git checkout --
与网络同步
git push
git pull
与网络服务器建立关联
git remote add(先有本地再与网络关联时用该命令)
解释:,通常我们先用git clone从网络上克隆,就自动建立了关联
但也可以先有本地代码仓库(分布式),再用git remote add远程库向远程建立关联和上传代码.
建立关联后,以后用git push 向远程仓库推送代码
4. 顶峰决战
svn 的版本号是顺序递长的,看版本号就知道谁更新
svn log -v 能够看到具体那些文件发生了变动.
svn diff -rA:B 能够具体看到哪些文件内容发生了改变, 我已经svn diff 改用vimdiff 来显示,更直观!
git 能应战否?
git log --name-status
git diff A B
git vd A B //vd 是用vimdiff显示,需要设置.
a: <版本号> versus
svn commit 对应一个递长的版本号
git commit 对应一个hash 值,
这从log 功能上能看出来, 因为git 是分布式,独立工作,你用1,2,3,我也用1,2,3就没法同步了,到底谁的是1,2,3
git 有一个指针HEAD 来指向不同的版本,只要用命令
git reset --hard commit_id 就可以了.
借助于git log, git reflog, git reset 可以在各个版本间游走,
svn 若要恢复到以前版本,则不那么方便了,它会真刀实枪把版本文件从服务器替换到工作区,一般除非必要很少这样操作
而git虽然也是真刀实枪替换了工作区文件,但从本地,而且很快,可以很方便的游走.
git tag 查看标签,
git tag
git tag
git show
git tag -d
git push origin --tags 推送全部未推送标签
git push origin
git push origin :refs/tags/
标签的简洁性可以与版本号相匹敌, commit_id 为版本游走提供了方便
但总之,git 没有一目了然的版本号. git 略输一筹.
b:
二者匹敌
后者还有 git log --stat, 图形显示,好像功能更丰富.
c: git 也可以用vimdiff 来比较 , 先配置一下,再运行 git df 即可
git config --global diff.tool vimdiff
git config --global difftool.prompt false
git config --global alias.df difftool
svn 与 git 二者匹敌
5. git 的分支操作
在svn上,我很少用分支操作,实在不得以,会另开仓库或另建目录.
分支功能并不是一定要有的.直接在master 上干不就可以了吗.
当然了,你要保证每次提交,master都是能正常运行的.
git 的这种先创建分支,在分支上操作,然后再合并分支,再删除分支的做法
其实只是为了保证一定是要有一个master 是可运行的,是好的.
纵使在本地机器上也一样,好像也就这么多了. 最终保留一个分支就好
如果你要保留多个版本,对应多个分支,也是可以的,但总不如用不同的目录分开好.
总之,git 与 svn 是两个典型的分布式和集中式版本控制软件,都是免费的和性能优良的.
根据你特定的情况选择吧.顺便说一下,我也用过VSS,clear-case,cvs,这些就淘汰掉吧
我的.gitconfig 配置
$ cat .gitconfig
[user]
email =
name =
[alias]
st = status
vd = difftool
ci = commit
co = checkout
slog = log --abbrev-commit --oneline
[diff]
tool = vimdiff
[difftool]
prompt = false
[core]
editor = vim
[push]
default = matching