(转) [GIT] Windows 安装GIT,使用 Github 手记
================
Windows下Git与TortoiseGit使用教程(Github为例)(二)
准备工作
软件安装
我指的是Windows下。由于Git从来没有官方的windows版(可以理解,linus做的嘛),windows下有两种非官方使用途径,一个是Cygwin,另一个是msysGit。Cygwin比较凶残,直接把Gnu工具集转移到了windows上,不过不推荐,cygwin这个东西,如果不做嵌入式,不需要交叉编译,用不着这么凶残,msysGit就足够了,也更简单。目前是1.8.0。
TortoiseGit同时支持两种使用Git的方式。它只是一个壳,实际调用的还是Git本身。这两个软件安装也没有什么好说的,除了安装路径之外,其他的全部默认就OK。
TortoiseGit安装后,请设置好你的姓名邮箱,这将会记录到版本信息中。开始菜单找到tortoisegit的settings就可以了,不用细说吧?
密钥
Git的身份验证不是密码,而是密钥。通常我们会有一个Git服务器,而我们的电脑就是工作机,我们需要一个RSA密钥来确认身份。密钥分为两个:私有的和公开的,其实是这样,公开的存放在服务器上,而私有的放在你手里,核对的时候通过一系列复杂算法就可以匹配了。私有密钥绝对不要被其他人看到,这是一个项目中,确认每个人身份的标识。
密钥可以用命令行生成一个。不过我们有TortoiseGit,看一下TortoiseGit的开始菜单,是不是有一个叫Puttygen的东西?密钥这个东西有很多工具都可以生成,Puttygen就是个图形化的工具。使用很简单,只要运行Puttygen,把右下角的数值改成4096(这个是最长的)然后点击“Generate”就可以了。点击之后它会要求你随机移动鼠标,直到进度条满为止。
生成完之后呢?千万不要关闭这个窗口!要是手贱关了,那么……再来一遍吧。你要在passphrase和下面的确认框输入密码,这个密码你自己写咯,不过记着哦。写好之后,点“save private key”保存就行。
Public key是填在服务器上的,我们以github为例,如果是别的代码托管网站,或者你自己搭建,原理都一样。打开你的Github账户,Edit YourProfile,然后SSH keys,然后add,然后把putty生成的public key贴进去就行了。
Github的那点事
Github是开源社区目前最活跃的项目托管网站,类似的网站还有SourceForge,bitbucket,google code等,每个网站支持的版本控制系统不一样,主要就是SVN、Git与Hg,github仅支持Git,其他协议需要很麻烦的插件来扩展,一般很少会用。
尽管Git本身是分布式的,但我们通常仍然需要一个中心的作为标准的服务器,方便协同开发。Github就是起到了这个作用。
通常我们这样进行协同开发:项目有几个成员,创建者在Github上创建项目,并把其他人添加到项目中。项目组成员可以直接向中心库提交代码,而其他人如果想参与进来,就需要用“fork”创建一个项目的分支副本,然后向原始项目提交合并申请,非项目组成员的提交是需要批准才能合并的。这也是通常的开源软件的开发模式:核心成员主导方向,所有开发人员都可以参与进来。
当然了,非开源项目就没有那么麻烦,只要项目成员向中心库提交代码就行了
================
当使用时,会出现以下三种情况的中文乱码:
1. ls不能显示中文目录
解决办法:在git/etc/git-completion.bash中增加一行:
alias ls='ls --show-control-chars --color=auto'
2. git commit不能提交中文注释
解决办法:修改git/etc/inputrc中对应的行:
set output-meta on
set convert-meta off
3.git log无法显示中文注释
解决办法:在git/etc/profile中增加一行:
export LESSCHARSET=iso8859
==========
远程版本库的使用
尽管git在本地也可以方便地进行版本管理,但是多人协作,或者是多地操作时,总需要使用到远程仓库来进行版本维护。在前面创建版本库的内容中其实使用clone命名就已经是在与远程版本库进行交互了,clone远程库后便会自动创建一个名为origin的远程库,可以使用git remote -v命名查看远程库的详细信息。
$ git remote -v
而在实际工作中,我们可能需要频繁地与某一个或几个远程库交互,那么更好的办法是使用一个别名把远程库保存起来。git添加远程库的方法很简单:
# $ git remote add <name> <remote-url>
$ git remote add pro-git https://github.com/progit/progit.git
这样便将https://github.com/progit/progit.git这个远程git版本库添加并命名为pro-git,后续你只需要使用pro-git便可以指代progit的远程库。
push
当你完成本地工作,并将改动提交到本地版本库后,你便可以使用push将本地提交推送到远程仓库了:
# $ git push <remote-name> <branch-name>
$ git push pro-git master
默认会使用origin和master作为远程仓库和本地分支的名称。
当然你也可以将本地分支推送到远程仓库作为一个分支:
# $ git push <remote-name> <local-branch>:<remote-branch>
$ git push pro-git master:git-branch
当<local-branch>为空时,会尝试删除远程分支:
$ git push pro-git :git-branch
上述命令会删除远程仓库中的”git-branch”分支
fetch与pull
fetch与pull命令都会将一个远程仓库抓取到本地,不同的是fetch仅仅是将远程仓库抓取到本地,以供进行后续操作;pull除了将远程仓库抓取到本地,还会试图与本地当前分支进行合并。
他们与clone不同的是,clone会copy一份版本仓库到本地,如果本地已存在版本仓库,则会被clone后的仓库替换。而fetch和pull都需要在已有本地仓库的条件下操作,不能作为创建本地仓库的方法,即是必须先git init或是git clone后才能使用fetch和pull。
删除远程仓库
$ git remote -d <remote-name>
准确一点说,这只是删除远程仓库在本地的别名,而不是真正删除远程服务器上的git仓库。
重命名远程仓库
$ git remote rename oldname newname
Git别名
虽然git中很多命名都简单易记,但每次都手动输入这些命令确实会浪费不少时间,而且也有那么些命令选项非常冗长,这时就可以使用别名来简化命令的输入了。
别名属于配置项内容,所以需要使用git config命令,如可以为“checkout -b”命令配置别名“cob”
$ git config --global alias.cob 'checkout -b'
为“commit -a -m”配置别名“cam”:
$ git config --global alias.cam 'commit -a -m'
为单行图像化显示log命令“log –pretty=oneline –graph”配置别名“lol”:
$ git config --global alias.lol 'log --pretty=oneline --graph'
至此,git基础篇结束。你已经可以使用git进行日常的代码管理维护,下一篇进阶篇将着重介绍分支,git配置,git原理以及gith