1、如何在服务器上配置git服务器
第一步,安装git:$ sudo apt-get install git
第二步,创建一个git用户,用来运行git服务:$ sudo adser git
第三步,创建证书登录:收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。
第四步,初始化Git仓库:先选定一个目录作为Git仓库,假定是/srv/sample.git,在/srv目录下输入命令:$ sudo git init --bare sample.gitGit就会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾。然后,把owner改为git:$ sudo chown -R git:git sample.git
第五步,禁用shell登录:出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成。找到类似下面的一行:git:x:1001:1001:,,,:/home/git:/bin/bash
改为:git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。
第六步,克隆远程仓库:现在,可以通过git clone命令克隆远程仓库了,在各自的电脑上运行:$ git clone git@server:/srv/sample.gitCloning into 'sample'...warning: You appear to have cloned an empty repository.
2、什么是git服务器
Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。
Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Git的主要功能:
1、查看邮件或者通过其它方式查看一般开发者的提交状态。
2、打上补丁,解决冲突(可以自己解决,也可以要求开发者之间解决以后再重新提交,如果是开源项目,还要决定哪些补丁有用,哪些不用)。
3、向公共服务器提交结果,然后通知所有开发人员。

(2)git服务器路径扩展资料:
Git的优缺点:
优点:
1、适合分布式开发,强调个体。
2、公共服务器压力和数据量都不会太大。
3、速度快、灵活。
4、任意两个开发者之间可以很容易的解决冲突。
5、离线工作。
缺点:
1、资料少(起码中文资料很少)。
2、学习周期相对而言比较长。
3、不符合常规思维。
4、代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。
3、如何将git服务器提供给其他人使用
1. 架设Git服务器
我们以Ubuntu为例。首先,在git服务器上创建一个名为 'git' 的用户,并为其创建一个.ssh 目录。并将其权限设置为仅git用户有读写权限
$ sudo adser git
$ su git
$ cd
$ mkdir .ssh
$ chmod 700 .ssh
接下来,把开发者的 SSH 公钥添加到这个用户的 authorized_keys 文件中。假设你通过电邮收到了几个公钥并存到了临时文件里。重复一下,公钥大致看起来是这个样子:
$ cat /tmp/id_rsa.john.pub
ssh-rsa /ww+ouN4gSLKssMxXnBOvf9LGt4L
ojG6rs6hPB09j9R/T17//5zytK6Ztg3RPKK+4k
Ez
/nLF6JLtPofwFBlgc+myiv
Pq
dAv8JggJICUvax2T9va5 gsg-keypair
只要把它们逐个追加到 authorized_keys 文件尾部即可,同时将authorized_keys设置为仅git用户有读写权限。
$ cat /tmp/id_rsa.john.pub >> ~/.ssh/authorized_keys
$ cat /tmp/id_rsa.josie.pub >> ~/.ssh/authorized_keys
$ cat /tmp/id_rsa.jessica.pub >> ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys
现在可以用 --bare 选项运行 git init 来建立一个裸仓库,这会初始化一个不包含工作目录的仓库。
$ cd /opt/git
$ mkdir project.git
$ cd project.git
$ git --bare init
这时,Join,Josie 或者 Jessica 就可以把它加为远程仓库,推送一个分支,从而把第一个版本的项目文件上传到仓库里了。值得注意的是,每次添加一个新项目都需要通过 shell 登入主机并创建一个裸仓库目录。我们不妨以 gitserver 作为 git 用户及项目仓库所在的主机名。如果在网络内部运行该主机,并在 DNS 中设定 gitserver 指向该主机,那么以下这些命令都是可用的:
# 在 John 的电脑上
$ cd myproject
$ git init
$ git add .
$ git commit -m 'initial commit'
$ git remote add origin git@gitserver:/opt/git/project.git
$ git push origin master
这样,其他人的克隆和推送也一样变得很简单:
$ git clone git@gitserver:/opt/git/project.git
$ vim README
$ git commit -am 'fix for the README file'
$ git push origin master
用这个方法可以很快捷地为少数几个开发者架设一个可读写的 Git 服务。
作为一个额外的防范措施,你可以用 Git 自带的 git-shell 工具限制 git 用户的活动范围。只要把它设为 git 用户登入的 shell,那么该用户就无法使用普通的 bash 或者 csh 什么的 shell 程序。编辑/etc/passwd 文件:
$ sudo vim /etc/passwd
在文件末尾,你应该能找到类似这样的行:
git:x:1000:1000::/home/git:/bin/sh
把 bin/sh 改为 /usr/bin/git-shell (或者用 which git-shell 查看它的实际安装路径)。该行修改后的样子如下:
git:x:1000:1000::/home/git:/usr/bin/git-shell
现在 git 用户只能用 SSH 连接来推送和获取 Git 仓库,而不能直接使用主机 shell。尝试普通 SSH 登录的话,会看到下面这样的拒绝信息:
$ ssh git@gitserver
fatal: What do you think I am? A shell?
Connection to gitserver closed.
这里提供的方法,组内所有成员对project都有读写权限,也就是说每个分支都可以push代码,如果需要更加细致的权限控制,请使用Gitosis或者Gitolite。
2. 搭建Gitweb
安装gitweb之后就可以通过网站访问我们的项目了。就像http://git.kernel.org一样显示了
首先需要安装Gitweb,如果没有安装apache,那么直接安装Gitweb,也会将apache2安装的。
$ sudo apt-get install gitweb apache2
安装完成之后,我们只需要修改一下配置文件,将/etc/gitweb.conf文件中的$projectroot修改为放工程文件的目录。
$ vim /etc/gitweb.conf
# path to git projects (<project>.git)
$projectroot = "/opt/git";
至此gitweb就可以使用了,现在可以通过http://[git_server_IP]/gitweb访问了。
3. Push之后发送邮件通知
当组内成员push代码到服务器上之后,会自动发送邮件通知组内所有人员,该次push的具体内容是什么。具体配置方法:
一般在安装Git的时候发送邮件的脚本/usr/share/git-core/contrib/hooks/post-receive-email已经存在了,首先要修改所有者和执行权限,并且安装sendmail。
$ sudo chown git:git post-receive-email
$ sudo chmod 755 post-receive-email
$ sudo apt-get install sendmail
然后到切换到工程目录下的hooks中,添加 post-receive软链接指向 /usr/share/git-core/contrib/hooks/ post-receive-email。
$ cd /opt/git/project.git/hooks
$ ln -s /usr/share/git-core/contrib/hooks/post-receive-email post-receive
最后修改工程目录中的config文件即可。mailinglist是邮件列表, envelopesender是发件人的邮箱,
$ vim /opt/git/project.git/config
[core]
repositoryformatversion = 0
filemode = true
bare = true
[hooks]
mailinglist = "[email protected], [email protected]" # 收件人列表
envelopesender = [email protected] # 送件人地址
emailprefix = "[Project commit] " # 邮件标题前缀
showrev = "git show -C %s; echo" # 不只显示有变化的文件,同时也显示改变的内容
为了使邮件显示的更清楚,还要修改一下工程目录当中的description文件,在description文件中,默认第一行是项目名称,所以要在第一行填入该项目的名称,这个在邮件中会有显示。
$ vim /opt/git/project.git/description
Project_A
4、本地git软件怎么连接linux服务器地址
1、前期准备
服务器上配置好的git
git客户端
1.1
在服务器上安装git (本机所使用的linux是ubuntu)
在服务器输入命令:sudo apt-get install git即可 然后创建名字为git的用户组和用户
1.2
下载客户端 在浏览器地址栏输入:https://git-for-windows.github.io/
回车后
点击Download进行下载
2、具体操作
2.1
在合适的位置创建一个目录充当git远程仓库(本机位置为/usr/testgit),然后使用init命令初始化仓库
在命令终端输入:
sudo git init –bare
2.2
将git init生成的目录所属者改为git
输入命令:sudo chown -R git:git *
至此服务器端的操作完成。
在客户端合适位置使用git 客户端从服务器资源
2.3
首先打开git客户端
点击Git Bash Here 后出现
在git客户端命名终端输入:
git clone git@xxxxxx:/rrrrr 其中xxxxxx是远程服务器的地址 rrrrr为git仓库所在位置
如果配置正确你选中的目录下会出现名字为testgit的文件夹 testgit文件夹下随意创建若干个文件
2.3
在git客户端上使用命令 git add 111.txt 222.txt 333.txt 或者使用git add .(将本文件夹下所有文件都add) 该命令的作用是告诉git把文件添加到git仓库
2.4
然后使用git commit命令将文件提交到git仓库
-m 后面的内容为本次提交文件的一些注释内容
此时文件还没有从本地仓库上传到远程服务器仓库
2.5
使用push命令将本地仓库中的内容提交到远程仓库
在git客户端命令终端输入:git push origin master
至此本地仓库中的文件上传已经上传到远程服务器仓库。
在其他文件夹下再次使用 git clone 命令 从远程服务器同步仓库
5、git服务器仓库地址变了,怎么更改本地的
先查看remote的名字 git branch -r 假设你的remote是origin,用专git remote set_url 更换地址属 git remote set-url origin remote_git_address remote_git_address更换成你的新的仓库地址
6、自己搭建的git服务器怎么使用
Git没有客户端服务器端的概念,但是要共享Git仓库,就需要用到SSH协议(FTP , HTTPS , SFTP等协议也能实现Git共享,此文档不讨论),但是SSH有客户端服务器端,所以在windows下的开发要把自己的Git仓库共享出去的话,就必 须做SSH服务器。
一、安装GIT
Windows下使用msysgit,
本文使用Git-1.7.8-preview20111206.exe 安装要点步骤
安装完成后,可以使用Git bash在命令行模式下操作git
二、安装CopSSH
安装CopSSH之前先确保防火墙开启了SSH端口,这个虽然不影响CopSSH的安装,但是影响SSH访问,所以写在前面。
CopSSH是windows下的SSH服务器软件,下载地址baidu之,本文使用的是Copssh_4.1.0_Installer.exe,
安装完成后,到控制面板中新建一个管理员账户root,用这个账户来共享SSH。然后你在账户管理中会看到之前的SvcCOPSSH账户。
将root用户添加到CopSSH用户中,为简单操作,允许使用密码认证方式
若是不允许密码认证,则需要使用公钥密钥方式认证,
三、CopSSH中使用GIT
现在已经安装GIT和CopSSH,接下来需要做的就是让CopSSH可以使用GIT的命令,这样不仅能够远程SSH管理GIT服务器,而且可以将GIT仓库通过SSH共享。具体的操作方法是将GIT的某些命令程序和动态链接库复制到CopSSH安装目录下即可。
l 将$ Git\libexec\git-core目录下的git.exe , git-receive-pack.exe , git-upload-archive.exe , git-upload-pack.exe复制到$ICW\bin目录下
l 将$Git\bin目录下的libiconv-2.dll复制到$ICW\bin目录下
重启CopSSH即可
7、git一般安装在本地服务器制定的目录下吗
git一般安装在本地服务器制定的目录下
安装msysgit
安装步骤此处略去。
END
安装CopSSH
安装步骤此处略去。
END
修改配置
修改CopSSH配置文件C:\Program Files\ICW\etc\sshd_config,确保如下行为非注释行,且设置为“no”:
END
生成用户帐号
1
在服务器上生成Windows用户,取消用户下次登录时须更改密码,设置密码永不过期:
2
将该用户隶属于GitUser组(如尚未生成改组,则先生成改组):
END
激活用户
1
在Windows启动程序组中,运行如下程序(C:\Program Files\ICW\bin\ copsshcp.exe):
2
进入COPSSH Control Panel应用对话框,正常情况下服务应该为正在运行(图标为绿色,如为红色,则可尝试点选该按钮,启动该服务):
3
选择Users页面:
4
点选Add按钮,出现如下导航对话框:
5
选择Forward按钮,出现如下页面,选择欲激活的用户对应的域名及用户名:
6
选择Forward按钮,进入如下页面,选择Linux shell and Sftp,所有选项选中:
7
选择Forward按钮,进入确认页面,选择Apply:
8
回到如下页面,选择Apply后,关闭。
END
公钥文件上传
1
从用户处取得对应帐户的公钥文件authorized_keys,复制到C:\Program Files\ICW\home\ricky\.ssh目录下(\ricky\是对应的用户名);
2
Windows启动程序组中运行Start a Unix BASH Shell(或Windows运行中运行命令:"C:\Program Files\ICW\bin\bash.exe" --login -i):
3
运行如下unix命令行,如运行未出错,则完毕。
END
生成Git库容器目录
1
在服务器硬盘上生成一个目录,用来容纳Git库,比如生成E:\ GITTestRepo\目录;
2
鼠标右键点击该目录,选择共享和安全…;
3
在弹出的该目录属性对话框的安全页中加入用户对应的组GitUser;
4
确认该用户组权限设置了允许修改、读取和运行、列入文件夹目录、读取、写入,选择确定后完毕。
END
确认防火墙开放了22端口
确认服务器的防火墙没有禁止22端口的TCP/IP通信。
END
修改用户登录运行脚本
1
修改C:\Program Files\ICW\home\ricky\.bashrc文件(\ricky\是对应的用户名),在文件最后加入如下行:
8、怎样在服务器上部署gitlab
GitLab是由Ruby语言开发的基于Linux的Git服务器,是我见过的最强大的Git服务器。发现它之后,立即决定将Git服务器换成GitLab。
但安装好GitLab之后面临一个问题,如何将服务器上的git项目直接导入到GitLab,之前的Git服务器是由是git+apache搭建的(详见在Linux上用Apache搭建Git服务器)。
在网上发现了这篇文档——Import bare repositories into your GitLab instance,并按之进行了操作。
1)设置存放代码库的主目录
vi /etc/gitlab/gitlab.rb
比如这里设置为:git_data_dir "/gitlab/repos"
2)访问刚搭建的GitLab站点,创建一个group,比如cnblogs。
这时会在 /gitlab/repos 下创建 /gitlab/repos/repositories/cnblogs 文件夹。
然后在/gitlab/repos/repositories/创建一个文件夹,比如cnblogs
3)将现有的所有git项目文件复制到这个文件夹
cp -r /data/git/* /gitlab/repos/repositories/cnblogs
4)修改一下复制过来的文件夹的所有者:
chown -R git:git /gitlab/repos/repositories/cnblogs
5)运行GitLab导入命令
cd /var/opt/gitlab
gitlab-rake gitlab:import:repos
等了一段时间之后,显示done,却一个项目也没导入进来。
经研究发现,在导入时,GitLab只认文件夹名以.git结尾的项目。于是,将要导入的项目文件夹名称加上.git后缀,再次进行导入。
结果显示导入成功,比如:
Processing cnblogs/CNBlogsJob.git
* Created CNBlogsJob (cnblogs/CNBlogsJob.git)
Done!
可以是GitLab站点上却看不到已导入的项目。多次努力,也没能解决这个问题。
后来,实在没办法,改为手动导入,导入方法如下:
1)在GitLab站点上创建与要导入的项目同名的项目。
2)进入刚创建的项目文件夹
cd /gitlab/repos/repositories/cnblogs/项目名称.git
3)删除该文件下的所有文件
rm -rf *
4)将要导入的项目文件夹下的所有文件复制过来
cp -r /data/git/CNBlogsJob/* /gitlab/repos/repositories/cnblogs/CNBlogsJob.git
就这样将项目一个一个地导入进来。
5)导入完成后,修改一下导入的所有项目的文件所有者
chown -R git:git /gitlab/repos/repositories/cnblogs
如果不修改所有者,客户端无法进行git push。
就这样手动地完成了现有Git项目的导入。
备注:操作系统是CentOS 6.2,GitLab版本是7.8.4。
9、git repo怎么看到服务器的目录
用 repo 拿的时候其实 .git 统统会放在 .repo 里,然后外面的.git都只是link
其实 repo 只是管理多 git 的工具,里面版回本管理部分实际用的答都是git,它的好处就是能够把多个git组合成一个大的项目
你如果需要省空间,可以用 repo sync -c ,这样只会获取当前相关的分支。