Git

Git简介

Subversion、CVS等属于集中式版本控制系统,只有一个仓库(repository)存在于服务器中,有多个工作目录(working copy)。
Git是分布式版本控制系统,除了服务器中的仓库,每一个工作目录中还都包含一个完整仓库,这样可以支持离线工作,即可以先提交到本地仓库,稍后再提交到服务器仓库。
分布式系统理论上比集中式的单服务器系统更健壮,单仓库系统一旦服务器出现问题整个系统就不能运行了,分布式系统通常不会因为一两个节点而受到影响。

git – 简明指南

http://rogerdudler.github.io/git-guide/index.zh.html

本地仓库由3部分组成:工作目录(stage),缓存区(index),head
提交的过程:暂存->commit->push
commit命令是提交到HEAD,push命令是提交到远端仓库
git pull origin master是把远端origin版本库改动更新到本地master分支上。
git push origin master是把本地master分支改动推送到远端origin版本库上。

clone代码到本地

#会在当前目录下创建以工程名称命名的目录
git clone https://git.oschina.net/
xxxx.git

git报错:github fail to sync branch

启动shell

git fetch https://github.com/abc/abc.git
git reset --hard origin/master

http://scribu.net/blog/resetting-your-github-fork.html

撤消对文件的修改 git checkout — <file>

git checkout -- Project1/BPushConfig.plist

http://blog.csdn.net/wirelessqa/article/details/20152353

清空暂存区

撤销已暂存的文件

git reset head 
git reset head 文件名

撤销已提交到本地的文件

git reset head^

查看帮助

git reset -help

git reset [–hard|soft|mixed|merge|keep] [或HEAD],将当前的分支重设(reset)到指定的或者HEAD(如果不显示指定commit,默认是HEAD,即最新的一次提交),并且根据[mode]有可能更新index和working directory。mode的取值可以是hard、soft、mixed、merged、keep。

fatal: The remote end hung up unexpectedly

解决fatal: The remote end hung up unexpectedly,执行下方面的命令,把可提交的内容设置大一些。

git config http.postBuffer 524288000

使用sshkey免登录

在gitoschina中使用sshkey,把.pub的内容复制到公钥框内确定保存即可,就可以在本地免登录更新了。
http://git.oschina.net/profile/sshkeys

SVN

svn 常用命令

svn update 简写:svn up
svn update 如果后面没有目录,将当前目录以及子目录下的所有文件都更新到库最新版本。
svn update -r 12679 test.php 将版本库中的文件test.php还原到版本12679
svn update test.php 将版本库更新到本地。

如果在提交的时候提示过期,是因为冲突,需要先update,修改文件,然后清除svn resolved,最后再提交commit。
嵌出指定版本的工程

svn checkout 工程http地址 -r 版本号
例:svn checkout http://…/project1 -r 8321
http://os.51cto.com/art/200908/143157.htm

svn 导入

例如:将本地目录local1导入到版本库的trunk/server1,trunk/server1在导入之前不需要存在,svn import会递归的创建目录。
在终端中进入local1同级目录,然后执行以下代码
svn import -m “New import” local1 http://…/trunk/server1
这样会把local1目录下的文件导入到/trunk/server1下,不会创建local1目录。
在导入数据之后,本地的local1目录并没有纳入版本控制,为了开始工作,要运行svn checkout得到一个干净的目录树工作拷贝。
svn import -m “import libs” libs https://xxx.googlecode.com/svn/trunk/xxx/KxxxX/libs
svn import -m “import” controller https://xxx.googlecode.com/svn/trunk/re…../controller/

@的问题:

在iOS开发中,遇到Default@2x.png文件名不被svn命令完全识别的问题。
解决方法是在这个特殊文件名后面再加一个@,例如
svn add Default@2x.png@
svn remove Default@2x.png@

revert

svn revert --depth=files path/to/directory
 svn revert 目录 -R

查看某版本修改过的文件列表

svn log -r版本号 -v

查看查文件的历史版本

svn log 本地文件路径

查看svn库信息,包括服务器路径等

svn info

列出自某版本或某日期以来修改过的文件

svn diff -r 1038 --summarize svn://path > changedfiles.txt
svn diff -r 1038:HEAD --summarize svn://path > changedfiles.txt
svn diff -r {2015-05-06} --summarize https://path > changedfiles.txt
svn diff -r {2015-05-04}:{2015-05-05} --summarize https://path > changedfiles.txt