标签归档:git

GIT与SVN常用

I GIT

1 与远程保持一致

git reset --hard HEAD 

2 恢复某一个文件

git checkout trunk/code/src/main/webapp/static/js/manufacturer/product.js

3 切换到某个目录,CHECKOUT一个文件的版本

git log login_bg.jpg
git checkout d7d05048d76767b212e1839d3c91136c9d9f48be login_bg.jpg

4 创建新分支

git checkout -b Branch_calendar

5 显示所有分支

git branch -a

6 切换分支

git checkout Branch_calendar 
#如果不存在时会自动创建分支

7 配置基本信息

git config --global user.name "Jacob"
git config --global user.email "hlnie@tohours.com"

8 强制设置当前分支到某个commit

git reset --hard
git reset --hard <commit>

9 清空本地未提交的东西

git clean -df . & git reset --hard

II SVN

1 检出

svn checkout https://svn.tohours.com/svn/scratch aia3

2 提交

svn commit -m "commit"

3 全部增加

svn add --force ./

4 查看状态

svn status

5 更新

  • 在目录:
svn update
  • 不在目录:
svn update d:\deploy\scratch 

6 导出

svn export d:\deploy\scratch d:\webapps\aia3

7 Diff

svn diff -r 1327:1326 mcsd_svc.php

8 回滚到前一个版本

svn merge -r 340:334 ./

9 删除SVN没提交的文件

rm -f  `svn status | awk '{print $2}'`

10 删除某种『._的文件』

rm -f `find . | grep "\._"`
rm -f `find . | grep "\.DS_Store"`

11 SVN revert

svn revert -R .

git svn更换svn地址的方法

主要有以下几步:

  1. 打开“工程/.git/config”文件,找到其中“[svn-remote “svn”]”将相应地址更换
  2. 将cmd打开,进入到本工程,然后使用git svn fetch命令
  3. 刚开始会直接要求输入密码,如果所给提示用户名是正确的,刚将正确的密码输入即可
  4. 如果所给的用户名不正确,则直接按回车,就会提示输入正确的用户名和正确的密码
  5. 在完成以上操作后,如果在使用git svn dcommit的时候还是出现问题,则需要svn库里面增加新的提交,然后使用git svn fetch取回本地,这样就可以正确识别了

git 同步整个工程时出错

git向bitbucket进行https同步时,如果工程比较大,会出现如下错误:

git  result=22, HTTP code = 502

出现错误的原因是由于本地http缓存太小的缘故,所以要重新设置一下参数,可执行如下命令。

git config http.postBuffer 5242880000
通过以下命令查询
git config –get http.postBuffer

如果直接使用git config http.postBuffer 则将postBuffer变量就置为空了,现在具体这个值太大了会不会对我们有影响,网上的资料也非常的少,只有一个stackoverflow有一两个这方面的讨论,地址是:http://stackoverflow.com/questions/2702731/git-fails-when-pushing-commit-to-github

hosts的问题

昨天困扰了我很久,为什么在我的win7上可以下载googlecode数据,而在MacOS上总是卡在git clone上。今天又尝试了在CentOS上做git clone,结果跟MacOS上是一样的效果。

于是我尝试了在这两台虚拟设备上访问googlecode,结果是可以访问的,我就不知道哪里出了问题。开始的时候我还以为是MacOS自带的git不好用,于是我又下载了一个最新的版本安装了一下,但结果依旧。直到今天在CentOS上又出现同样的事情,让我有些警觉

我尝试着去连git的ref head,结果不能打开,于是我大概知道了是什么原因,还是由于我win机器里面的google hosts会自动更新,而两个虚拟机却不能共享我这台机器的hosts造成的。于是把win的hosts文件拷贝两份给两台机器,一切解决。

但今天又出现了一个问题,我已经完成iphone demo的开发,想装在自己的iphone上,但根据网上生成ipa的方法,我始终差一步,就是不能被xcode搜索到我的机器。我不知道是不是由于我的MacOS在虚拟机中的缘故,其实说实话我们做IOS开发被Apple设置了重重障碍,不得不花费更大的精力在这种与开发无关的事情上,劳民伤财啊

git-svn协同工作

现在工作中已经离不了版本控制了,而作为两种目前比较流行的版本控制软件,SVN和GIT各有各的优势。SVN中小单位使用比较广泛,GIT作为分步式的版本控制更加能体现版本控制的独立性。在以往的工作中,我总是把它们分开来使用,因为现在不缺少git和svn的服务器,googlecode对两种版本控制都做了很好的支持。

但由于历史的原因,我还不能完全切换到GIT上工作,目前我们的项目大部分使用VISUAL SVN作为服务端,代码托管到WINDOWS服务器。在此之前我主要使用SVN客户端进行工作,但缺点显而易见,由于我们的SVN服务器是局域网,所以回家以后就不能再连到服务器,做的一些工作想做一个暂时性的保存是不可能的,如果能够整合GIT和SVN的各自优势,则就不会出现这些问题了。

而今天,最新版本的mysysgit和其外壳tortoisegit 已经完美支持git-svn和中文了,下面我说一下操作的步骤:

1、用git bash执行

git svn clone  https://svn-path/git

这句是针对visual svn的,因为大部分都是https协议的,又没有证书,如果不先用命令行你就没有办法选择和输入用户名密码,选择永久接受,并输入用户名密码,获取版本库

image

2、尽情使用git add, git commit ,git status, git log,然后git svn dcommit就可以了,期间你可以使用任何换基操作,最好不要跟原来的冲突,整合后再提交你的修改

3、tortoise git 的show log和diff相当好用,比命令行更加直观化,其blame可以让你看到整个文件的一生,让人有种时光穿梭的感觉

到此我才知道git提供换基与变基操作的真实含义,无论你在本地提交多少次,只要在dcommit前把这些合并一下,svn版本库里面就不会出现你合并前的操作记录,给别人看起来也更加清爽。

另外两个比较有用的设置,git bash虽然好用,但每次都要进行路径切换。可将git目录下的bin目录设置到path中,在工程目录按住shift右击,“在此处打开命令窗口”,就可以进行git操作了,如果ls会出现中文乱码,就直接用dir好了,这个保证不会有问题,使用git的相关命令也没问题,甚至你可以在任何地方使用vim编辑器了,多么酷的一个功能啊!

git跟金山快盘实现私人代码协同开发

使用github和googlecode都有一个问题,如果你不愿意为些付费的话,就只能把自己的代码公开。有没有一种即免费又可以使用git进行协同开发的工具呢,经过探索与技术的进步,金山快盘已经具备了这个实力

1、安装git客户端和Tortoise Git(更好支持中文)

2、安装金山快盘客户端,最好新建一个账户仅用于同步代码使用,或者新建一个目录同步代码

3、在金山快盘建项目目录,将使用

image

4、勾选Make it Bare,点击OK就建好了一个空的仓库image

5、将项目目录推送到快盘目录(要自定义快盘目录,并选用英文名称)

这样就可以实现本地代码与快盘上的bare库的同步了,现在快盘对碎小文件的同步速度也有了大大的提高,所以基本不用担心速度问题。

接下来该讲一下怎么样协同操作

1、将这个项目目录共享给快盘好友

image

 

2、填写你好友的快盘账号,赋予可编辑权限,点击应用就可以了

image

3、通过你好友的快盘,查找到共享的这个目录,并使用git clone到本地,这样就实现了两的同步

同样,加人的操作都是通过快盘来实现的。这样就完成了多人协同开发的问题。

这里有一个问题,快盘并不像github 或googlecode那样可以判断多人同时提交的问题,如果快盘出现同步提交时会出现后者覆盖前者的问题,所以在一个人提交完成未同步完成时,另外一个人千万不要同步代码,不然可能会出现不可预料的问题。

不管怎么说,这样就实现了不花钱托管私有代码的目的,而且还能通过简单的操作实现多人协同开发,不得不说是开发人员的一大福音啊