标签归档:svn

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 .

异地备份

原来咨询过阿里云的客服,说是每天磁盘都有镜像,我也能看到镜像,所以本来是不考虑再做异地备份了,相信阿里云,相信政府。但有一个瞬间,我觉得异地备份不是一件麻烦的事情,于是今天就做了如下操作

备份

利用现有的条件做备份

  1. 服务器默认安装了SVN,不用白不用
  2. 我默认有SVN服务器,不用白不用
  3. 我需要做的只是使用mysqldump导入wordpress数据库,利用cp拷贝出uploads目录
  4. 然后再svn commit一下,就可以每天生成一个版本

这样做的好处

  • 显而易见,这样做两台服务器都不需要额外安装任何工具,只需要新建一个仓库写一个脚本就完事了,如何腾不出这点时间呢
  • SVN做的是差异备份,这样做比每天一个目录更省空间,你尽可以每天提交一个版本

具体操作

  1. 新建SVN仓库,假设叫backup
  2. svn checkout https://svn.server/backup
  3. 配置/etc/my.cnf,将mysql的用户名密码写到[mysqldump]下
  4. 执行mysqldump wordpress > backup/wordpress.sql
  5. 执行yes|cp -r /path/to/wordpress/wp-content/uploads/ backup/
  6. cd /path/to/backup
  7. svn commit -m “date +”%Y-%m-%d”
  8. crontab -e
  9. 增加一行0 1 * * * /bin/sh /root/backup.sh

这样,每天在凌晨1点的时候,会自动备份数据库和附件的目录到SVN服务器

资源下载

backup.sh下载

利用VisualSVN Server和hooks来实现原型提交自动同步到原型服务器

要解决的问题:设计师在页面开发完成后通过svn将页面提交到指定的目录,开发人员虽然可以从svn中获得一个拷贝,但对客户来说装个svn客户端是不现实的,所以需要一个实时的在线查看地址;

由于VusualSVN Server支持在线查看,所以如果将apache跳转到相应的页面地址,修改header返回Content-Type: text/html应该能够正常显示(但这不是我们讨论范围)

解决方法:
1、配置svn的Path属性,指向本地VisualSVN Server下的bin目录
2、win + r, 输入services.msc,找到VisualSVN Server,使用管理员账户登录
image-767262
3、书写脚本到Post-commit hook中,内容如下
image-2
set WORKING_COPY=E:\wwwroot\项目名称\
svn update %WORKING_COPY% –username xxx –password xxx
4、配置iis,将prototype.xxx.com指向wwwroot
5、当项目中有提交的时候,就会及时更新到prototype.xxx.com在线地址

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-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编辑器了,多么酷的一个功能啊!