如何在服务器上搭建git服务器
Git没有客户端服务器端的概念,但是要共享Git仓库,就需要用到SSH协议(FTP , HTTPS , SFTP等协议也能实现Git共享,此文档不讨论),但是SSH有客户端服务器端,所以在windows下的开发要把自己的Git仓库共享出去的话,就必 须做SSH服务器。
一、安装GIT
Windows下使用msysgit,
本文使用Git-178-preview20111206exe 安装要点步骤
安装完成后,可以使用Git bash在命令行模式下操作git
二、安装CopSSH
安装CopSSH之前先确保防火墙开启了SSH端口,这个虽然不影响CopSSH的安装,但是影响SSH访问,所以写在前面。
CopSSH是windows下的SSH服务器软件,下载地址baidu之,本文使用的是Copssh_410_Installerexe,
安装完成后,到控制面板中新建一个管理员账户root,用这个账户来共享SSH。然后你在账户管理中会看到之前的SvcCOPSSH账户。
将root用户添加到CopSSH用户中,为简单操作,允许使用密码认证方式
若是不允许密码认证,则需要使用公钥密钥方式认证,
三、CopSSH中使用GIT
现在已经安装GIT和CopSSH,接下来需要做的就是让CopSSH可以使用GIT的命令,这样不仅能够远程SSH管理GIT服务器,而且可以将GIT仓库通过SSH共享。具体的操作方法是将GIT的某些命令程序和动态链接库复制到CopSSH安装目录下即可。
l 将$ Git\libexec\git-core目录下的gitexe , git-receive-packexe , git-upload-archiveexe , git-upload-packexe复制到$ICW\bin目录下
l 将$Git\bin目录下的libiconv-2dll复制到$ICW\bin目录下
重启CopSSH即可
git协作开发,不是以用户名和密码的方式
根据git所使用的协议,如果是ssh 那么方式就应该为 git@youdomaincom:xxxxxxgit的方式,如果是这样,那么配置了公钥那么就可以直接访问了,不需要用户名和密码,如果是http/https的方式,那么验证的就是你登陆的用户名和密码,著名的gitlab 可以同时使用这两种方式,不需要你亲自去配置 ,详见 :http://aboutgitlabcom
sharyuke
gitcafe最近也进去了,好像改了一个版,还蛮好看的,进探索看了一下,推荐的项目都是2年之前的了,给我的感觉是以前有一阵子很火,然后沉默了,当然,如果单纯是代码存储还是可以的。
代码中国,有1000个私有仓库,但是中文用户名个人有点接受不了。
应该还有一个codingnet,冒泡里面各种灌水,进去了没有写代码的欲望了,我的感觉是不严谨,像一个娱乐社区。
上面三个,我还是愿意选择gitcafe,比较纯净一点。
最后:
Github,细节做得很好,可能有时候访问稍微慢一点,但是Q不是问题。进去之后看到别人的PR,issue很有想自己写代码的冲动。
通过以下的步骤,你将在服务器上搭建并使用你自己的Git服务,例如myhostexamplecom。其中的一些步骤,像email通知,限制用户的权限,特定分组的接入管理,都是依据你的要求和现实状况的可选项。还有很多命令,你需要root权限才能执行,所以别忘了用sudo,或者(最好不要)直接切换到root来执行。
为有读写权限的用户建立一个分组。根据你的操作系统,你可以用groupadd命令来实现,用vigr来编辑分组文件,或者直接编辑/etc/group文件。在最后,你会在/etc/group文件中看到如下一行
repogroup::10005:marry,john,violet
其中,repogroup是准许接入这个仓库的组的名字。10005是一个独一无二的分组识别数字,marry,john,violet则是获准接入这个仓库的用户。
决定Git仓库的路径。它既可以放在你的home路径下(eg
/home/yourname/gitroot),也可以放在一个专用的路径下(eg
/var/gitroot)
配置权限,让Git用户可以访问这个目录
chmod
g+rx
/path-to/gitroot
chown
:grouprepo
/path-to/gitroot
建立新的Git仓库,叫做newrepo
cd
/path-to/gitroot
git
init
--bare
newrepogit
建立路径认证,以允许用户组访问,同时有针对性的设置Git
cd
newrepogit
chown
-R
:grouprepo
git
config
coresharedRepository
group
find
-type
d
-print0
|
xargs
-0
chmod
2770
find
-type
f
-print0
|
xargs
-0
chmod
g=u
设置提交(commit)的email通知(commit是一条命令),这样当有新的修改提交到仓库的时候,开发者们将会收到一封关于修改内容一览的电子邮件。
echo
'One-line
project
description'
>description
git
config
--local
hooksmailinglist
email-a@examplecom,email-b@examplecom,
git
config
--local
hooksemailprefix
'[DI-PR]
'
git
config
--local
hooksshowrev
"git
show
-C
%s;
echo"
git
config
--local
hooksemailmaxlines
100
通过设置一个称为钩子(hook)的东东,来创建这些email通知。
cd
hooks
cp
post-receivesample
post-receive
chmod
+x
post-receive
从post-receive的脚本中移除掉最后一行注释的#字号,最后语句应该是这样的
/path-to-hooks/post-receive-email
在你的库中先放入一个文件(比如README)。为了避免其他用户在第一次提交时遇到奇怪的错误信息时感到困惑,这是有必要的。
cd
to-your-personal-working-directory
git
clone
myhostexamplecom:/path-to/gitroot/newrepogit
echo
"Short
project
description"
>READMEtxt
git
add
READMEtxt
git
commit
-a
-m
"Add
README
file"
git
push
origin
master
#
第一次仅仅需要T"origin
master"
这个参数
为仓库的其他用户建立账户。依据你系统的不同,你可以通过useradd
或者adduser来实现。
设置用户可以通过公/私钥配对来访问。这包括以下几步:
1)已经有公钥的用户,只需要把公钥发给你就好。
2)没有公钥的用户,必须用ssh-keygen命令来生成一个,然后把ssh/id_rsapub发给你就可以了。
3)之后你必须在他们对应的账户下面建立这种公/私钥配对。复制他的公钥,然后顺序执行下面的命令。
sudo
su
-
username
mkdir
-p
ssh
cat
>>ssh/authorized_keys
<<\EOF
paste-key-as-one-line
EOF
exit
改变用户的账户让他们使用受限的shell。如果你想让你添加进来的用户仅仅使用Git,而不是Unix的所有东西,那么就设置他们的账户,让他们只能使用Git。Git提供了这种专为这种需求设计的受限shell。它通常被安装在
/usr/libexec/git-core/git-shell
or
/usr/local/libexec/git-core/git-shell。因此,对所有你想限制权限的用户,你可以执行以下命令。
sudo
chsh
-s
/usr/libexec/git-core/git-shell
username
告诉你的用户,用下面的语句来克隆仓库到本地。
git
clone
myhostexamplecom:/path-to/gitroot/newrepogit
到了这里,恭喜你,你成功了!
码云和github的区别:码云的服务器在国内,在国内访问速度比github快很多,可以免费让自己的仓库他人不可见。访问速度很快,支持svn,git两种方式,免费账户同样可以建立私有项目,而github上要建立私有项目必须付费。
码云是OSCHINANET推出的代码托管平台,支持Git和SVN,提供免费的私有仓库托管。gitHub是一个面向开源及私有软件项目的托管平台,因为只支持git作为唯一的版本库格式进行托管,故名gitHub。
Git 可以使用四种主要的协议来传输数据:本地传输,SSH 协议,Git 协议和 HTTP 协议。
Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。
Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Git的主要功能:
1 检查电子邮件或其他方式来检查提交状态的平均开发人员。
2 修补程序并解决冲突(您自己或要求开发人员稍后重新提交它,如果它是一个开源项目,请确定哪些修补程序可以工作,哪些不能)。
3将结果提交到公共服务器,然后通知所有开发人员。
扩展资料:
Git的优缺点:
优点:
1 适合分布式开发,强调个人。
2 公共服务器压力和数据量不是太大。
3快速和灵活。
4任何两个开发人员之间的冲突都可以很容易地解决。
5 离线工作。
缺点:
1 数据很少(至少是中文)。
2 学习周期相对较长。
3不符合传统思维。
4 可怜的代码的机密性。一旦开发人员克隆了整个库,所有代码和版本信息都可以完全公开。
GitLab是由Ruby语言开发的基于Linux的Git服务器,是我见过的最强大的Git服务器。发现它之后,立即决定将Git服务器换成GitLab。但安装好GitLab之后面临一个问题,如何将服务器上的git项目直接导入到GitLab,之前的Git服务器是由是git+apache搭建的(详见在Linux上用Apache搭建Git服务器)。在网上发现了这篇文档——ImportbarerepositoriesintoyourGitLabinstance,并按之进行了操作。1)设置存放代码库的主目录vi/etc/gitlab/gitlabrb比如这里设置为:git_data_dir"/gitlab/repos"2)访问刚搭建的GitLab站点,创建一个group,比如cnblogs。这时会在/gitlab/repos下创建/gitlab/repos/repositories/cnblogs文件夹。然后在/gitlab/repos/repositories/创建一个文件夹,比如cnblogs3)将现有的所有git项目文件复制到这个文件夹cp-r/data/git//gitlab/repos/repositories/cnblogs4)修改一下复制过来的文件夹的所有者:chown-Rgit:git/gitlab/repos/repositories/cnblogs5)运行GitLab导入命令cd/var/opt/gitlabgitlab-rakegitlab:import:repos等了一段时间之后,显示done,却一个项目也没导入进来。经研究发现,在导入时,GitLab只认文件夹名以git结尾的项目。于是,将要导入的项目文件夹名称加上git后缀,再次进行导入。结果显示导入成功,比如:Processingcnblogs/CNBlogsJobgitCreatedCNBlogsJob(cnblogs/CNBlogsJobgit)Done!可以是GitLab站点上却看不到已导入的项目。多次努力,也没能解决这个问题。后来,实在没法,改为手动导入,导入方法如下:1)在GitLab站点上创建与要导入的项目同名的项目。2)进入刚创建的项目文件夹cd/gitlab/repos/repositories/cnblogs/项目名称git3)删除该文件下的所有文件rm-rf4)将要导入的项目文件夹下的所有文件复制过来cp-r/data/git/CNBlogsJob//gitlab/repos/repositories/cnblogs/CNBlogsJobgit就这样将项目一个一个地导入进来。5)导入完成后,修改一下导入的所有项目的文件所有者chown-Rgit:git/gitlab/repos/repositories/cnblogs如果不修改所有者,客户端无法进行gitpush。就这样手动地完成了现有Git项目的导入。备注:操作系统是CentOS62,GitLab版本是784。
0条评论