一直以来, 一直在用svn做为版本系统, 最近几年git异常流行, 看来到了必须学习一下的时刻了, 若是为了学习而学习, 学了,然后时间长了不用, 估计也就忘记了, 因此必须应用到实际环境中。
初步考虑在家里的一个pc上安装git 的server, 然后把个人的资料, 分布在笔记本上, 其他机器上的资料通过git都做版本化, 这样由于数据, 在笔记本上保存一份本地副本, 在gitserver上也存在一份, 可以充分防止丢失。
另外利用git等的版本化功能, 可以分析数据的变化情况等, 做好历史记录, 即使有重名的数据, 重复的文件, 数据的删除等都可以通过历史等进行显示和管理等。
为此上网收集了一些资料, 参照进行了实践, 资料记录如下:
Windows下Git Server的搭建
人一多,就有江湖,还有一些奇奇怪怪的需求,比如,要在Windows平台下搭建Git Server。我的第一想法是在Windows上跑虚拟机,虚拟机里跑Linux,Linux上跑Git Server,完美!
人最怕的就是追问,为什么不在Windows上直接跑应用呢?于是就有了本文。
搜索下,其实Windows下Git Server的软件还是挺多的,这里有一篇博文就记载了18种之多,我也是接受他的推荐,选择了SCM-MANAGER,官网地址:https://www.scm-manager.org
SCM-MANAGER的安装
小套路:安装一个软件,你至少要:
1. 看一下它的官网;
2. 了解下它的软硬件及环境要求;
3. 下载;
4. 依官方安装文档安装;
5. 记笔记;
一、SCM-MANAGER的安装要求
SCM-MANAGER需要java环境,官网说要>= java 1.7,那本文就用java1.8吧!
二、安装java 1.8
好难受,要不要在这里写Windows平台java环境的搭建呢?算了,还是放个安装文档的链接吧!
三、下载SCM-MANAGER
下载地址:https://www.scm-manager.org/download/
四、安装SCM-MANAGER
解压压缩包,然后scm-server.bat install
启动服务后就可以用http://ip:8080来访问了,默认用户名和密码都是scmadmin。对了,别忘了在计算机的服务里面找“scm-server”,由手动改成自动,这样每次就可以开机自启了。
安装到此结束,下一站Git常用命令见!
来源: https://www.jianshu.com/p/177b5233c279
——————————-
Windows下配置Git服务器和客户端
为了配合Redmine使用,特地用Git来做版本控制。
选择Git服务器部署策略
找了一圈,发现如下方法来架设Git服务器:
- Git Candy:http://github.com/Aimeast/GitCandy/ AE大神的作品, Git Candy© 是一个基于ASP.NET MVC的Git分布式版本控制平台,Git Candy的目标是轻松干掉Bonobo,逐渐追赶Github,并用微创新超过Github
- Bonobo Git Server:http://www.chodounsky.net/bonobo-git-server/ 需要IIS6+/.net 4/asp.net MVC 3,官方提供了比较详细的安装说明,但据说问题不少
- WebGit.NET:https://github.com/otac0n/WebGitNet/wiki/Getting-Started 需要IIS/asp.net MVC 3/msysgit,好久不更新了
- Git-Web-Access:https://github.com/yysun/Git-Web-Access 又一个MVC开发的,也好久没有更新
- git-dot-aspx:https://github.com/JeremySkinner/git-dot-aspx 需要iis7+/.net 4/asp.net MVC 2,也好久没有更新
- Grack:https://github.com/schacon/grack 需要ror环境,也好久没有更新
- GitStack:http://gitstack.com/ 对系统的要求比较高,2003/xp就无法支持了
- scm-manager:https://bitbucket.org/sdorra/scm-manager 需要Java环境,更新比较频繁,安装配置比较简单
- Gitblit:http://gitblit.com/ 同样需要Java环境,安装配置比较简单
- Gitalist:http://www.gitalist.com/ 需要perl环境,安装配置也简单
- Indefero:http://www.indefero.net/open-source/ 需要PHP/MySQL/Apache等,好久不更新
- Git Daemon即守护进程:通过git daemon –reuseaddr –base-path=/path/to/git/启动,通过git://协议进行访问,使用9418端口进行通信,需要配合Gitosis才能好用
- Gitolite:https://github.com/sitaramc/gitolite 需要cygwin/ssh以及一堆设置
- http://therightstuff.de/CommentView,guid,b969ea4d-8d2c-42af-9806-de3631f4df68.aspx
- http://beta.wikiversity.org/wiki/Topic:Git/%E5%9C%A8Windows%E4%B8%8B%E5%AE%89%E8%A3%85Gitolite
- gitosis:https://github.com/tv42/gitosis 需要cygwin/ssh以及一堆设置
- http://markembling.info/2009/08/git-server-gitosis-and-cygwin-on-windows
- http://jerabi.com/sdionne/blog/2010/09/06/git-repository-server-gitosis-on-win7-working/
- GitLab:http://gitlabhq.com/ 需要ruby/Gitolite/Nginx等一堆
- CopSSH+msysgit+putty等工具,配置好繁琐
- http://code.google.com/p/tortoisegit/wiki/HOWTO_CentralServerWindowsXP
- http://www.timdavis.com.au/git/setting-up-a-msysgit-server-with-copssh-on-windows/
- http://www.codeproject.com/Articles/296398/Step-by-Step-Setup-Git-Server-on-Windows-with-CopS
- 通过GitHub.com,或者类似的托管服务,这个是最省事的了
- Windows文件共享,但是不利于权限控制,极不推荐
- git remote add origin file:///ipaddress/sharename/
- git clone file:///ipaddress/sharename/
通过比较发现需要CopSSH/Cygwin等环境的应用配置起来比较复杂,剩下的几个支持git smart http协议的web应用配置起来比较简单:
- Bonobo Git Server
- WebGit.NET
- Git-Web-Access
- scm-manager
- Gitblit
- Gitalist
最后再根据更新/稳定等因素筛选出Bonobo Git Server、scm-manager、Gitblit,结果最终选择了scm-manager。
配置scm-manager
在机器上安装java环境,从http://java.com/zh_CN/download/manual.jsp选择脱机版下载安装
从https://bitbucket.org/sdorra/scm-manager/wiki/download下载最新的scm-server-1.24-app.zip
安装为系统服务:
1
|
scm-server.bat install |
然后在系统服务里设置为自动启动,然后启动服务就可以通过http://localhost:8080访问了,默认用户名和密码都是scmadmin。
登进系统以后通过Repository Types修改Git中心库存放的路径。
修改默认的管理员用户名或者是其他的一些配置都可以找到%userprofile%\.scm\config目录下的相应xml配置文件来修改,注意要重启scm-server服务。
更新:低版本操作系统如server 2003可能会在C:\Documents and Settings\Default User\.scm这样的目录下,而不是当前用户文件夹
如果要启用邮件以及提醒,还需要安装插件scm-mail-plugin、 scm-notify-plugin,然后在设置中把Mail相关的SMTP设置填写好。
如果代码提交要跟Redmine关联,还需要安装插件scm-redmine-plugin,然后在项目信息里的Redmine选项卡配置Redmine地址为http://localhost:3000;
如果要启用更新、自动关闭,还需要scm-manager和redmine使用同样的用户名密码,而且Redmine设置里必须启用REST API;
然后在提交的时候需要用git commit –m “(#问题ID) fix 修复内容”来关闭问题,可以用的关键字如fix,fixed等可以自行配置。
客户端安装
不管最终是使用那一种客户端(Git Extensions:http://code.google.com/p/gitextensions/或TortoiseGit:http://code.google.com/p/tortoisegit/),msysgit都是必须安装的:从http://msysgit.github.com/下载最新的Git-1.8.0-preview20121022.exe安装即可。
偏向使用命令行的只装msysgit就足够了;如果要使用图形界面可以选择msysgit自带的git gui,或者是另外安装git extensions或tortoisegit;个人感觉git extensions的图形界面比较强大,如果安装它的话一定要安装上KDiff3。
更便捷的就是与Visual Studio集成了,Git Extensions安装的时候可以选择安装Visual Studio插件集成;另外还有一个工具可以进一步提升便捷性Git Source Control Provider:http://gitscc.codeplex.com/,它依赖于msysgit和git extensions,可以在官方网站下载安装或者在visual studio扩展管理里面搜索git进行安装。
Git配置
Git客户端安装好之后最好配置一个全局的用户名及邮箱:
1
2
|
git config --global user.name "Your Name Here" git config --global user.email your_email@youremail.com |
这个配置在新建Repository时可能会用到;另外可以通过一下命令来查看配置:
1
|
git config --list |
Git相关资料
- Pro Git 中文版:http://git-scm.com/book/zh http://progit.org/book/zh/ 有墙,用google随便找一个PDF版直接下载
- Git Community Book 中文版:http://gitbook.liuhui998.com/index.html
- Git Magic:http://www-cs-students.stanford.edu/~blynn/gitmagic/intl/zh_cn/
- Git开发管理之道:http://blog.leezhong.com/translate/2010/10/30/a-successful-git-branch.html
- 如何高效利用GitHub:http://www.yangzhiping.com/tech/github.html
- 图解Git:http://marklodato.github.com/visual-git-guide/index-zh-cn.html
- 笔记《版本控制之道–使用Git》:http://www.nshen.net/sitelog/2011/08/03/git-note.html
- Git 故事连载:http://gitstory.wordpress.com/category/git/ Git Web Access作者写的(注意有墙)
另外还可以从Git Immersion一步一步演练:http://gitimmersion.com/lab_01.html
来源:https://www.jianshu.com/p/177b5233c279
—————-
图解Git
基本用法
上面的四条命令在工作目录、暂存目录(也叫做索引)和仓库之间复制文件。
git add files
把当前文件放入暂存区域。git commit
给暂存区域生成快照并提交。git reset -- files
用来撤销最后一次git add files
,你也可以用git reset
撤销所有暂存区域文件。git checkout -- files
把文件从暂存区域复制到工作目录,用来丢弃本地修改。
你可以用 git reset -p
, git checkout -p
, or git add -p
进入交互模式。
也可以跳过暂存区域直接从仓库取出文件或者直接提交代码。
git commit -a
相当于运行 git add 把所有当前目录下的文件加入暂存区域再运行。git commit.git commit files
进行一次包含最后一次提交加上工作目录中文件快照的提交。并且文件被添加到暂存区域。git checkout HEAD -- files
回滚到复制最后一次提交。
约定
后文中以下面的形式使用图片。
绿色的5位字符表示提交的ID,分别指向父节点。分支用橘色显示,分别指向特定的提交。当前分支由附在其上的HEAD标识。 这张图片里显示最后5次提交,ed489是最新提交。 master分支指向此次提交,另一个maint分支指向祖父提交节点。
命令详解
Diff
有许多种方法查看两次提交之间的变动。下面是一些示例。
Commit
提交时,git用暂存区域的文件创建一个新的提交,并把此时的节点设为父节点。然后把当前分支指向新的提交节点。下图中,当前分支是master。 在运行命令之前,master指向ed489,提交后,master指向新的节点f0cec并以ed489作为父节点。
即便当前分支是某次提交的祖父节点,git会同样操作。下图中,在master分支的祖父节点maint分支进行一次提交,生成了1800b。 这样,maint分支就不再是master分支的祖父节点。此时,合并 (或者 衍合) 是必须的。
如果想更改一次提交,使用 git commit --amend
。git会使用与当前提交相同的父节点进行一次新提交,旧的提交会被取消。
另一个例子是分离HEAD提交,后文讲。
Checkout
checkout命令用于从历史提交(或者暂存区域)中拷贝文件到工作目录,也可用于切换分支。
当给定某个文件名(或者打开-p选项,或者文件名和-p选项同时打开)时,git会从指定的提交中拷贝文件到暂存区域和工作目录。比如,git checkout HEAD~ foo.c
会将提交节点HEAD~(即当前提交节点的父节点)中的foo.c
复制到工作目录并且加到暂存区域中。(如果命令中没有指定提交节点,则会从暂存区域中拷贝内容。)注意当前分支不会发生变化。
当不指定文件名,而是给出一个(本地)分支时,那么HEAD标识会移动到那个分支(也就是说,我们“切换”到那个分支了),然后暂存区域和工作目录中的内容会和HEAD对应的提交节点一致。新提交节点(下图中的a47c3)中的所有文件都会被复制(到暂存区域和工作目录中);只存在于老的提交节点(ed489)中的文件会被删除;不属于上述两者的文件会被忽略,不受影响。
如果既没有指定文件名,也没有指定分支名,而是一个标签、远程分支、SHA-1值或者是像master~3类似的东西,就得到一个匿名分支,称作detached HEAD(被分离的HEAD标识)。这样可以很方便地在历史版本之间互相切换。比如说你想要编译1.6.6.1版本的git,你可以运行git checkout v1.6.6.1
(这是一个标签,而非分支名),编译,安装,然后切换回另一个分支,比如说git checkout master
。然而,当提交操作涉及到“分离的HEAD”时,其行为会略有不同,详情见在下面。
HEAD标识处于分离状态时的提交操作
当HEAD处于分离状态(不依附于任一分支)时,提交操作可以正常进行,但是不会更新任何已命名的分支。(你可以认为这是在更新一个匿名分支。)
一旦此后你切换到别的分支,比如说master,那么这个提交节点(可能)再也不会被引用到,然后就会被丢弃掉了。注意这个命令之后就不会有东西引用2eecb。
但是,如果你想保存这个状态,可以用命令git checkout -b name
来创建一个新的分支。
Reset
reset命令把当前分支指向另一个位置,并且有选择的变动工作目录和索引。也用来在从历史仓库中复制文件到索引,而不动工作目录。
如果不给选项,那么当前分支指向到那个提交。如果用--hard
选项,那么工作目录也更新,如果用--soft
选项,那么都不变。
如果没有给出提交点的版本号,那么默认用HEAD。这样,分支指向不变,但是索引会回滚到最后一次提交,如果用--hard
选项,工作目录也同样。
如果给了文件名(或者 -p
选项), 那么工作效果和带文件名的checkout差不多,除了索引被更新。
Merge
merge 命令把不同分支合并起来。合并前,索引必须和当前提交相同。如果另一个分支是当前提交的祖父节点,那么合并命令将什么也不做。 另一种情况是如果当前提交是另一个分支的祖父节点,就导致fast-forward合并。指向只是简单的移动,并生成一个新的提交。
否则就是一次真正的合并。默认把当前提交(ed489 如下所示)和另一个提交(33104)以及他们的共同祖父节点(b325c)进行一次三方合并。结果是先保存当前目录和索引,然后和父节点33104一起做一次新提交。
Cherry Pick
cherry-pick命令”复制”一个提交节点并在当前分支做一次完全一样的新提交。
Rebase
衍合是合并命令的另一种选择。合并把两个父分支合并进行一次提交,提交历史不是线性的。衍合在当前分支上重演另一个分支的历史,提交历史是线性的。 本质上,这是线性化的自动的 cherry-pick
上面的命令都在topic分支中进行,而不是master分支,在master分支上重演,并且把分支指向新的节点。注意旧提交没有被引用,将被回收。
要限制回滚范围,使用--onto
选项。下面的命令在master分支上重演当前分支从169a6以来的最近几个提交,即2c33a。
同样有git rebase --interactive
让你更方便的完成一些复杂操作,比如丢弃、重排、修改、合并提交。没有图片体现这些,细节看这里:git-rebase(1)
技术说明
文件内容并没有真正存储在索引(.git/index)或者提交对象中,而是以blob的形式分别存储在数据库中(.git/objects),并用SHA-1值来校验。 索引文件用识别码列出相关的blob文件以及别的数据。对于提交来说,以树(tree)的形式存储,同样用对于的哈希值识别。树对应着工作目录中的文件夹,树中包含的 树或者blob对象对应着相应的子目录和文件。每次提交都存储下它的上一级树的识别码。
如果用detached HEAD提交,那么最后一次提交会被the reflog for HEAD引用。但是过一段时间就失效,最终被回收,与git commit --amend
或者git rebase
很像。
来源: http://marklodato.github.io/visual-git-guide/index-zh-cn.html
——————–
其实上面 图形化的内容我也没太看懂, 下面是 git客户端的一些资料
Git 有哪些好用的图形化客户端?目前用的最多的是?
tortoiseGit,唯一推荐(Windows下连命令行都不推荐)
- 功能很全,基本上命令行里有的功能在GUI上都有对应,而且设计的位置很合理
- 有许多人性化的设计,比如说自动转换CRLF,Windows下选错换行符类型就提交是一场灾难;再比如说所有需要输入分支名或者commit的地方都能从相应的对话框当中选
- 查看和编辑conflict很方便,不会把带着>>> <<<的文件就那么提交上去了
- 所有操作最后都落到具体的git命令上,会在一个小的日志窗口中显示使用的命令行以及参数,有心的话看这个就能知道这些操作对应到哪些git命令,也就顺便学会了命令行
讲道理说自己只用命令行的,有几个知道什么是reflog的,什么是rebase onto的,分得清subtree和submodule的,知道准确的submodule用法的……
以下为题主提供出常用的 Git 图形化客户端和工具,希望能够为题主和对此感兴趣的朋友带来帮助,谢谢。
一、Git GUI 客户端
- Git 客户端下载(Windows)
- TortoiseGit 客户端下载(Windows)
- Sourcetree 客户端下载(Windows、Mac)
- Git Extensions 客户端下载(Windows、Mac、Linux)
- SmartGit 客户端下载(Windows、Mac、Linux)
- GitEye 客户端下载 (Windows、Mac、Linux)
- gitg 客户端下载(Windows、Linux)
- ungit 客户端下载(Windows、Mac、Linux)
- git-cola 客户端下载(Windows、Mac、Linux)
- Tower 客户端下载(Mac)
- Gitbox 客户端下载(Mac)
- GitUp 客户端下载(Mac)
- giggle 客户端下载(Linux)
- Pocket Git 客户端下载(Andorid)
- Working Copy 客户端下载(IOS)
- Git2Go 客户端下载(IOS))
- GitDrive 客户端下载(IOS)
二、Git IDE 插件
- Eclipse、Myeclipse 插件下载
- Netbeans 插件下载
- IntelliJ IDEA 插件下载
- Visual Studio 插件下载
- Atom 插件下载
- Sublime Text 插件下载
三、Git 浏览器插件
- Git 浏览器插件下载(Chrome、Firefox、Safari、Opera,支持码云和Github)
- Octotree 浏览器插件下载(Chrome,支持Github)
- GitLab-TreeView 浏览器插件下载(Chrome,支持GitLab)
四、在线 Git 代码托管平台
- 码云 Gitee 官网
- GitHub 官网
- GitLab 官网
- Bitbucket 官网