Windows下Git Server的搭建

一直以来, 一直在用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服务器:

  1. Git Candy:http://github.com/Aimeast/GitCandy/ AE大神的作品, Git Candy© 是一个基于ASP.NET MVC的Git分布式版本控制平台,Git Candy的目标是轻松干掉Bonobo,逐渐追赶Github,并用微创新超过Github
  2. Bonobo Git Server:http://www.chodounsky.net/bonobo-git-server/ 需要IIS6+/.net 4/asp.net MVC 3,官方提供了比较详细的安装说明,但据说问题不少
  3. WebGit.NET:https://github.com/otac0n/WebGitNet/wiki/Getting-Started 需要IIS/asp.net MVC 3/msysgit,好久不更新了
  4. Git-Web-Access:https://github.com/yysun/Git-Web-Access 又一个MVC开发的,也好久没有更新
  5. git-dot-aspx:https://github.com/JeremySkinner/git-dot-aspx 需要iis7+/.net 4/asp.net MVC 2,也好久没有更新
  6. Grack:https://github.com/schacon/grack  需要ror环境,也好久没有更新
  7. GitStack:http://gitstack.com/ 对系统的要求比较高,2003/xp就无法支持了
  8. scm-manager:https://bitbucket.org/sdorra/scm-manager 需要Java环境,更新比较频繁,安装配置比较简单
  9. Gitblit:http://gitblit.com/ 同样需要Java环境,安装配置比较简单
  10. Gitalist:http://www.gitalist.com/ 需要perl环境,安装配置也简单
  11. Indefero:http://www.indefero.net/open-source/ 需要PHP/MySQL/Apache等,好久不更新
  12. Git Daemon即守护进程:通过git daemon --reuseaddr --base-path=/path/to/git/启动,通过git://协议进行访问,使用9418端口进行通信,需要配合Gitosis才能好用
  13. Gitolite:https://github.com/sitaramc/gitolite 需要cygwin/ssh以及一堆设置
    1. http://therightstuff.de/CommentView,guid,b969ea4d-8d2c-42af-9806-de3631f4df68.aspx
    2. http://beta.wikiversity.org/wiki/Topic:Git/%E5%9C%A8Windows%E4%B8%8B%E5%AE%89%E8%A3%85Gitolite
  14. gitosis:https://github.com/tv42/gitosis 需要cygwin/ssh以及一堆设置
    1. http://markembling.info/2009/08/git-server-gitosis-and-cygwin-on-windows
    2. http://jerabi.com/sdionne/blog/2010/09/06/git-repository-server-gitosis-on-win7-working/
  15. GitLab:http://gitlabhq.com/ 需要ruby/Gitolite/Nginx等一堆
  16. CopSSH+msysgit+putty等工具,配置好繁琐
    1. http://code.google.com/p/tortoisegit/wiki/HOWTO_CentralServerWindowsXP
    2. http://www.timdavis.com.au/git/setting-up-a-msysgit-server-with-copssh-on-windows/
    3. http://www.codeproject.com/Articles/296398/Step-by-Step-Setup-Git-Server-on-Windows-with-CopS
  17. 通过GitHub.com,或者类似的托管服务,这个是最省事的了
  18. Windows文件共享,但是不利于权限控制,极不推荐
    1. git remote add origin file:///ipaddress/sharename/
    2. git clone file:///ipaddress/sharename/

通过比较发现需要CopSSH/Cygwin等环境的应用配置起来比较复杂,剩下的几个支持git smart http协议的web应用配置起来比较简单:

  1. Bonobo Git Server
  2. WebGit.NET
  3. Git-Web-Access
  4. scm-manager
  5. Gitblit
  6. 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相关资料

  1. Pro Git 中文版:http://git-scm.com/book/zh http://progit.org/book/zh/ 有墙,用google随便找一个PDF版直接下载
  2. Git Community Book 中文版:http://gitbook.liuhui998.com/index.html
  3. Git Magic:http://www-cs-students.stanford.edu/~blynn/gitmagic/intl/zh_cn/
  4. Git开发管理之道:http://blog.leezhong.com/translate/2010/10/30/a-successful-git-branch.html
  5. 如何高效利用GitHub:http://www.yangzhiping.com/tech/github.html
  6. 图解Git:http://marklodato.github.com/visual-git-guide/index-zh-cn.html
  7. 笔记《版本控制之道--使用Git》:http://www.nshen.net/sitelog/2011/08/03/git-note.html
  8. 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 -pgit 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 有哪些好用的图形化客户端?目前用的最多的是?

想要向同事推荐使用Git。对方之前没有接触过版本控制的概念,也不熟悉linux shell和命令行。而我一直是在命令行中学习和使用Git的。因此也想找一找合适的客户端工具。想请教下有经验人士求推荐。需要的仅仅是使用git的工具,github for windows/mac 涵盖的不只是git了,就先不算。

tortoiseGit,唯一推荐(Windows下连命令行都不推荐)

  1. 功能很全,基本上命令行里有的功能在GUI上都有对应,而且设计的位置很合理
  2. 有许多人性化的设计,比如说自动转换CRLF,Windows下选错换行符类型就提交是一场灾难;再比如说所有需要输入分支名或者commit的地方都能从相应的对话框当中选
  3. 查看和编辑conflict很方便,不会把带着>>> <<<的文件就那么提交上去了
  4. 所有操作最后都落到具体的git命令上,会在一个小的日志窗口中显示使用的命令行以及参数,有心的话看这个就能知道这些操作对应到哪些git命令,也就顺便学会了命令行

讲道理说自己只用命令行的,有几个知道什么是reflog的,什么是rebase onto的,分得清subtree和submodule的,知道准确的submodule用法的……

以下为题主提供出常用的 Git 图形化客户端和工具,希望能够为题主和对此感兴趣的朋友带来帮助,谢谢。

一、Git GUI 客户端

  1. Git 客户端下载(Windows)
  2. TortoiseGit 客户端下载(Windows)
  3. Sourcetree 客户端下载(Windows、Mac)
  4. Git Extensions 客户端下载(Windows、Mac、Linux)
  5. SmartGit 客户端下载(Windows、Mac、Linux)
  6. GitEye 客户端下载 (Windows、Mac、Linux)
  7. gitg 客户端下载(Windows、Linux)
  8. ungit 客户端下载(Windows、Mac、Linux)
  9. git-cola 客户端下载(Windows、Mac、Linux)
  10. Tower 客户端下载(Mac)
  11. Gitbox 客户端下载(Mac)
  12. GitUp 客户端下载(Mac)
  13. giggle 客户端下载(Linux)
  14. Pocket Git 客户端下载(Andorid)
  15. Working Copy 客户端下载(IOS)
  16. Git2Go 客户端下载(IOS))
  17. GitDrive 客户端下载(IOS)

二、Git IDE 插件

  1. Eclipse、Myeclipse 插件下载
  2. Netbeans 插件下载
  3. IntelliJ IDEA 插件下载
  4. Visual Studio 插件下载
  5. Atom 插件下载
  6. Sublime Text 插件下载

三、Git 浏览器插件

  1. Git 浏览器插件下载(Chrome、Firefox、Safari、Opera,支持码云和Github)
  2. Octotree 浏览器插件下载(Chrome,支持Github)
  3. GitLab-TreeView 浏览器插件下载(Chrome,支持GitLab)

四、在线 Git 代码托管平台

  1. 码云 Gitee 官网
  2. GitHub 官网
  3. GitLab 官网
  4. Bitbucket 官网
来源: https://www.zhihu.com/question/22932048?sort=created