svn迁移到git

本文参考自:Git-与其他系统-迁移到-Git

也建议阅读之前,先看看此文章,本文主要是对里面方法的一个补充和完善,保证可用性

第一步:把之前svn的提交者的信息映射为git需要的

在本地的svn目录,执行以下命令:

svn log ^/ --xml | grep "^<author" | sort -u | perl -pe 's/<author>(.*?)</author>/$1 = /' > users.txt

显而易见,本方法要求主机上安装了grep,sort 和 perl.

最后得到的user.txt 是所有svn提交者的name。

在对应等号后面加上Email地址。

最终变成如下格式:

schacon = Scott Chacon 
selse = Someo Nelse 

第二步:使用svn2git来导入

在一个新的打算放置导入成功之后的git项目的目录(最后也把上一步的users.txt拷贝到此处)

前往github上面的svn2git项目,安装这个工具,能比较方便的进行svn到git的导入

执行以下命令:

svn2git svn://yourdomain.com/your/path/to/svn --username xingwang --verbose --authors users.txt

解释一下几个参数:
--username: 设定你在svn里面的用户名,方便执行svn co
--verbose: debug模式,能够了解svn2git执行了哪些命令,方便出问题的时候调试
--authors: 用来设定提交者信息,也就是上一步生成的users.txt

用package.json来管理NPM里面的依赖包

介绍了一些最近新近知道的使用npm的技巧

很久之前

开发前端项目(基于grunt),每新建一个项目,总是先用npm init来初始化一个package.json,然后就是一遍又一遍的


  npm install grunt-contrib-less --save-dev
  npm install grunt-contrib-concat --save-dev
  npm install grunt-contrib-requirejs --save-dev
  npm install grunt-contrib-uglify --save-dev

在进行版本控制的时候,以git为例,为了让项目组成员能拥有正确的开发环境,得git add node_modules,把里面所有的包都加入版本控制。一提交就是一大tuo,要是添加新的包,或者更新包,其他成员更新的时候,也是一堆。

新的能力 Get!

如果你有个新的项目,还没有下载过任何的npm包,而需要的npm包跟前一个项目差不多。那么,你可以把这个项目里面的package.json拷贝到当前项目根目录。然后npm install,所有的依赖包就会自动的下载完毕了!

现在

一个好的开发项目流程可以是这样:有一份好的前端项目开发模版,里面的目录可能是这样


src/
    css/
    js/
    img/
    less/

dist/
    css/
    js/
    img/
    less/

index.html
index-dev.html

doc/
    xxx.psd

package.json
Gruntfile.js
.gitignore

package.json里面有基本的包依赖

{
  "name": "my-project-name",
  "version": "0.1.0",
  "devDependencies": {
    "grunt": "~0.4.1",
    "grunt-contrib-jshint": "~0.6.0",
    "grunt-contrib-nodeunit": "~0.2.0",
    "grunt-contrib-uglify": "~0.2.2"
  }
}

.gitignore里面添加了node_modules/

每次新建项目就可以拷贝这份模版,然后初始化,加入版本库,提交。项目其他成功,更新到本地之后,同样的初始化就可以了

git push遇到503错误的解决方案

通过使用ssh协议或者修改链接远程仓库的地址的方式,解决在进行git push的时候,遇到503错误的情况

这两天,在虚拟机上开始用ubuntu进行开发,代码就保存到github上面(非核心代码)。之前在Windows上面用了很长一段时间的git,很方便。按理说在Linux上面应该更加方便,可是有个问题干扰了我很久,严重干扰了项目的开发。

在ubuntu上面,git clone,git pull这两个获取远程仓库上面代码的命令都工作的很正常,可是在使用git push提交代码的时候,总是不行


error: The requested URL returned error: 503 while accessing https://github.com/shuizhongyueming/yaoyao.git/info/refs

fatal: HTTP request failed

开始还怀疑是不是github被墙了,可要是墙了,是不会clone和pull成功的。然后也排除了github服务器出问题这个可能性,因为问题发生了好几天,要是真有这个问题,早就闹翻天了。

所以,最后只能是我这边的问题,我也只好安心Google了

万能的Stack Overflow再次给我找了解决方案。虽然提问人的错误代码跟我的不一样,是403,但是很奇怪,错误内容跟我的一模一样。可能这是github后来修改了返回的错误代码吧。

想要能够针对远程仓库的代码具有read和write的权限,有两种途径,一种是ssh,一种是用带有你的用户名的远程仓库的地址进行push。

第一种途径的做法是:


git remote set-url origin ssh://git@github.com/your-user-name/your-project-name.git

改https协议为ssh协议,github.com改为git@github.com

第二种途径的做法是:


git remote set-url origin https://your-user-name@github.com/your-user-name/your-project-name.git

改github.com为your-user-name@github.com

以上两种方式,我通过第二种方式是顺利的push了,有同样问题的同学,可以尝试着使用第一种看看行不行,也希望能把结果和我分享一下

windows下使用git,如何保存push到远程仓库时使用的密码

通过在Windows下使用msysgit往github上push内容的经历,详细说明了如何能保存帐号和密码而不用每次在push的时候都要重新输入一次帐号和密码

方法一

今天在做一个兼容且可跨越的localStorage的实施方案,打算使用github进行项目的代码管理和版本控制。工作环境是Windows,用的git工具是msysgit。

git clone,git commit,git push。这一套下来工作的很流畅,很正常,可是有一点比较麻烦,就是每次push的时候,总是要输入一次在github上面的帐号和密码。就想着能不能在本地存储这个帐号和密码,每次push的时候就自动提交这个去验证。

Google了一下,在一个github的帮助教程的快照上面看到了详细的关于如何在push到远程仓库时,不同系统下面如何去保存验证信息。其中提到了一个软件:git-credential-winstore,这个是专门在Windows下面用来管理git的验证信息的。然后在github的官方帮助文档:上面,找到了软件的官方地址(其实上面那个快照对应的就是下面那个地址的,可能是github更新了,所以内容有些不同,过段时间,Google那边更新快照之后应该就相同了)

可是在安装git-credential-winstore.exe的时候出了问题,会提示无法识别git,软件里面给的解决方式有两种:

  1. 在系统的环境变量PATH里面加上git的安装目录
  2. 通过cmd进行安装 安装使用如下命令行

明确的指定git所在位置

git-credential-winstore.exe -i C:Program Files(x86)Gitcmdgit.exe

可惜这两种方式我试过了都失败了。最后在这个文章上才找到解决方式:git-credential-winstore.exe必须放到git的安装目录里面,在bin/文件夹下。

安装这篇文章里面指示的放置文件之后,双击安装,还是报之前的错误。不过幸运的是,通过cmd的方式进行安装成功了。

原因应该是我的环境变量设定有问题吧,不清楚C:Program Files(x86)Gitcmd和C:Program Files(x86)Gitbin应该使用哪一个,这两个目录下面都是有git.exe的。

安装完成之后,就是如何在git里面配置和使用了。

在最开始看的那篇文章里面,说的配置是这样的

git config --global credential.helper cache

作用是启用验证信息缓存功能

可是我按上面的配置之后,在push的时候,却提示:‘credential-cache’ is not a git command

很明显,配置有问题的,可是git实在是新手,只好再次Google之,然后在Stack Overflow上面看到了这个帖子
说在Windows下面,那个配置中的cache应该改成winstore,正确的命令应该是这样的:

git config --global credential.helper winstore

按照这个命令重新执行了下,果然可以,在第一次push的时候,会有个弹窗,让你输入在github上面的帐号和密码,然后再次push的时候,就不必再输入帐号和密码了。

估计那篇文章里面使用cache,是指的在Linux下的吧,而在Windows下面使用git-credential-winstore来管理验证信息,所以credential.helper就应该是winstore

方法二

昨天(20150310),有个同事介绍了一个我认为使用上虽然啰嗦一点但是更便捷的方法,虽然在安全性上,有点无法保障。在这里跟大家介绍一下,也可以看这里原文地址

直接进入正题,步骤如下:
1. Windows中添加一个用户变量(开始-系统-高级系统设置-环境变量),名称为:HOME,值为%USERPROFILE%
设置用户变量
2. 在“开始-运行”中输入%Home%后确定,在打开的文件夹下新建一个名为_netrc的文件。
运行%Home%
新建_netrc文件
3. 用记事本打开_netrc文件,输入Git服务器名、用户名、密码,并保存,例如:

machine git.yourserver.org ---- git服务器名称
login yourlogin@email.com ---- git用户名
password yourpassword123 ---- git账号密码