Win10下如何搭建Git服务器作为私有仓库使用
Github - 一个网站,提供给用户空间创建git仓储,保存用户的一些数据文档或者代码等。
GitLab 是一个用于仓库管理系统的开源项目。
二者都是git的衍生产品
1 linux和windows端分别安装git,其中linux中可以用yum安装
[root@node0~]#yum install git
git的默认安装路径在/usr/libexec/git-core
[root@node0 git-core]#cd /usr/libexec/git-core
[root@node0 git-core]#git --version
git version 171
2设置linux端git的用户名和密码
[root@node0 git-core]# groupadd git
[root@node0 git-core]# useradd wang -g git
[root@node0 git-core]# passwd wang
New password:
3在服务器端创建远程仓库
[root@node0 ~]# mkdir -p /mnt/gitrep/wjf
[root@node0 ~]# cd /mnt/gitrep/wjf/
[root@node0 wjf]# git init
Initialized empty Git repository in /mnt/gitrep/wjf/git/
把仓库所属用户改为wang(git的用户名)
[root@node0 wjf]# chown -R wang:git git/
注:chown将指定文件的拥有者改为指定的用户或组 -R处理指定目录以及其子目录下的所有文件
4在windows客户端克隆仓库
$ git clone wang@19216811160:/mnt/gitrep/wjf/git
Cloning into 'wjf'
The authenticity of host '19216811160 (19216811160)' can't be established
RSA key fingerprint is SHA256:MgWCWF1m2tI
Are you sure you want to continue connecting (yes/no/[fingerprint]) yes
Warning: Permanently added '19216811160' (RSA) to the list of known hosts
wang@19216811160's password:
第一次连接远程仓库,出现黑体部分,这是因为Git使用SSH连接,而SSH连接在第一次验证GitHub服务器的Key时,需要你确认GitHub的Key的指纹信息是否真的来自GitHub的服务器,键入yes,然后输入远程仓库的密码就可以了。
5实际中也通常通过设置公钥的方式来连接远程仓库,这样就不用每次连接都需要密码了。
设置公钥:
1在windows客户端的gitbash中生成用户私钥和公钥
$ ssh-keygen -t rsa -C "emailname@emailcom"
在c盘用户路径下的/ssh文件夹下会生成私钥id_rsa和公钥id_rsapub
2linux端
首先 Git服务器打开RSA认证,即,修改/etc/ssh/sshd_config,将其中的以下三项打开
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile ssh/authorized_keys
然后,将客户端生成的公钥给到服务器端
即,将公钥给到 home/wang(git的用户名)/ssh/authorized_keys
[root@node0 ~]# cd /home/wang
[root@node0 wang]# mkdir ssh
[root@node0 wang]# chmod 777 ssh
[root@node0 wang]# touch ssh/authorized_keys
在windows客户端的gitbash中 执行:
$ ssh wang@19216811160 'cat >> ssh/authorized_keys' < ~/ssh/id_rsapub
然后在linux端:
[root@node0 wang]# chmod 600 ssh/authorized_keys
[root@node0 wang]# chmod 700 ssh
[root@node0 wang]# chown wang:git ssh
[root@node0 wang]# chown wang:git ssh/authorized_keys
至此,以后再连接远程仓库就不需要密码了。
若仍需要密码,可以查看ssh连接日志/var/log/secure:
常见连接失败原因:Authentication refused: bad ownership or modes for directory /home/wang/ssh
这时需要检查该目录的所属用户和读写权限等级是否符合要求。公钥以及ssh文件的权限应该属于git的用户和用户组,读写权限等级ssh 700,authorized_keys 600
我们都知道,使用git的好处是可以很好地对项目版本进行控制。
我们可以很清楚地看到修改了哪些代码,并可以恢复到我们想要的版本。
使用的话,平常我们都是先将改动的代码提交到本地仓库,再推送到远程仓库。
那如果我们不需要推送到远程仓库,只需要在本地仓库进行管理呢?
最近就在做项目时,需要建立本地仓库。
于是上网查了下资料,找到了建立本地git仓库的方法,下面简单描述一下:
1、在项目的根目录下,使用git init 命令创建一个版本库。执行过后会发现根目录下多了一个git的目录。
其中包括许多的空文件。比如:
config # 项目的配置信息
description # 项目的描述信息
HEAD # 项目当前在哪个分支的信息
hooks/ # 默认的“hooks” 脚本文件
index # 索引文件,git add 后把要添加的项暂存到这里
info/ # 里面有一个exclude文件,指定本项目要忽略的文件 #
logs/ # 各个refs的历史信息
objects/ # 这个目录非常重要,里面存储都是Git的数据对象
2、本地仓库创建成功后,使用git add 命令。把当前目录下的所有文件全部添加到暂存区。
3、再使用git commit 命令,将文件提交到本地仓库。
至此,本地仓库创建成功。当本地的源文件改动时,只需要再添加、提交到本地仓库即可。
使用git log 命令,可以看出有哪些内容被提交了。
甚至可以恢复到想要恢复的版本,这样及再也不用担心代码不能恢复的情况了。
注册github。
github是一个免费的服务器,用户可以直接在此网站上定义出属于自己的项目,而github对于学习者而言是免费的,但是如果你是一个公司的项目管理者,如果按照免费的方式注册了GITHUB,就有可能造成代码的泄漏。
那么在使用github之前要先进行注册:https://githubcom/
2
我们本次已经有了自己的账号,所以不再重新进行注册。如果已经注册成功之后,就可以直接进行账号登陆。
3
可是并不是说你有GiTHUB的账号就可以直接使用了,因为还需要生成一个SSH key后才可以使用。
1、生成一个SSH Key,在windows平台上可以直接使用“git bash”工具创建。
2、需要生成一个RSA编码的KEY。ssh-keygen -t rsa -C "gwolf_2010@126com"
注册时的时候输入一个密码。而且会自动的在用户所在目录生成一个“ssh”的目录,里面会保存有两个文件:私钥(id_rsa)、公钥(id_rsapub)。
4
打开GITHUB设置页面。选择New ssh可以按钮。
找到id_rspub文件的内容进行复制(一定要记住,别增加无用的任何内容)。
那么此时就标识已经让客户端和GITHUB之间建立好了一个安全的连接,由于SSH的存在GITHUB才可以进行用户的识别,以保证操作是最安全的。
5
添加远程仓库。
只有存在仓库,可以标识用户可以进行开发,但是在D:\githubtest\githubmicrocloud目录下已经存在有了一个本地仓库,所以下面希望可以将本地仓库发布在GITHUB上。在GITHUB上新建一个仓库,现在设置的仓库名为“githubmicrocloud”,随后选择创建仓库。而仓库创建完成之后会给出两种连接方式:
1、SSH连接地址:git@githubcom:caochuanping/githubmicrocloudgit
2、HTTPS的连接地址:https://githubcom/caochuanping/githubmicrocloudgit
本地仓库必须使用以上的地址才可以发布到服务器上。
6
把GITHUB与本地仓库相关联:
1、执行:git clone https://githubcom/caochuanping/githubmicrocloudgit
2、执行:git remote add origin https://githubcom/caochuanping/githubmicrocloudgit
此时已经和远程仓库之间建议了连接但是远程仓库里面并没有本地仓库的内容。
git push -u origin master
由于现在远程仓库里面并没有任何的文件存在,所以以上是将所有文件进行推送到服务器但是由于是第一次推送,而且推送的是master分支,那么使用一个“-u”将远程的master和本地的master进行关联。
注意:如果报错:
fatal: remote origin already exists
是没有关系的,说明远程仓库已经建立了联系。
7
由于本次使用的HTTPS的方式,所以将会要求输入自己的用户名和密码。也可以自己使用SSH的方式进行提交。
查看现在远程服务器端已经存在的仓库信息:
git remote -v
8
编写文件testtxt文件
此时所作出的所有修改都属于本地的修改,下面需要将其提交到服务器上;
git add
git commit -a -m "change file"
这个时候只是将其增加到了本地的mater分支上,但是远程的master分支依然没有发现变化。所以下面需要进行客户端像服务器端的推送;
git push origin master
9
那么此时就完成了本地代码与服务端代码的同步。
END
开通局域网共享(访问本机无需验证即可进入)
1、运行gpedimsct打开组策略-计算机配置-Windows 设置-安全设置-本地安全策略-安全选项-网络访问:不允许SAM帐户和共享的匿名枚举 设置为 已禁用
2、允许其它机访问本机(系统默认是不允许的)
组策略-计算机配置-安全设置-本地安全策略-安全选项-帐户:使用空白密码的本地帐户只允许进行控制台登录 设置为 已禁用
3、Windows防火墙:允许文件和打印机共享(系统默认不允许) 控制面板-Windows防火墙-例外-文件和打印机共享 设置为 选择。
Git没有客户端服务器端的概念,但是要共享Git仓库,就需要用到SSH协议,但是SSH有客户端服务器端,所以在windows下的开发要把自己的Git仓库共享出去的话,就必 须做SSH服务器。
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/gitlabrb 比如这里设置为: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,却一个项目也没导入进来。
一、 在 Ubuntu 系统中部署 Git Server
在Ubuntu系统中,这一步相当简单,只需要在Terminal中输入
sudo apt-get update
完成这一步后,就可以安装 git core 组件,通常情况下,安装在系统中的git 只是一个简单的客户端,包括一些最基本的命令以及特性,而作为保管代码的仓库,则还需要其他特性支持,所以需要安装 git core,如果之前已经安装了 git,那么仍然需要安装 git core
sudo apt-get install git-core
二、配置Git Server
完成这两步之后,就可以开始配置 Git Server 了。
增加 developers 组以及创建保存项目的仓库
需要创建一个新的用户组,并且将创建的仓库都放置在名为 git 的用户下,当然git 要隶属于 developers 组,这样也是为了方便将来的管理需要。
sudo groupadd developers
cd /home/
sudo mkdir git
sudo useradd git -d /home/git
以上四个命令分别为创建 developers 用户组, 并在/home/ 文件夹下为名为 git 的用户创建工作目录,创建名为 git 的用户账户并将它的工作目录指向/home/git。
之后,需要将增加的用户添加到 developers 用户组中,这一步一般通过修改/etc/group 文件达成,在正式修改 /etc/group 文件前或许需要先做一个备份。找到创建的用户组,譬如例子中创建的 developers。或许能在文件中看到类似的一行:
developers:x:1003:
将刚才创建的用户 git,添加到developers中,当然也可以添加其他的“开发者”,就像这样
developers:x:1003:git,tom,francklin,james
创建代码仓库,并修改权限。现在,回到创建好的工作目录 /home/git/,可能需要通过命令cd 来完成将工作路径由 /etc/ 切换为 /home/git/,然后让在 git 下创建一个新的仓库
sudo mkdir yourprojectgit
sudo chgrp developers yourprojectgit
sudo chmod g+rws yourprojectgit
需要将创建的文件夹的所有人由 root 修改为 developers,这样当在本地上传代码至仓库时就不会遇到权限不够的问题。其次需要将仓库的所有权修改,也可以用“777”修改仓库的权限,不过不建议这样做。
sudo git init —bare —shared yourprojectgit
在正式上传代码至仓库前,还需要对仓库进行初始化,请注意这里和平常使用方式的不同,—bare 指定创建的仓库为公共仓库,—shared 将使其他人都有权限将他们的代码提交至这个仓库中。
三、提交代码
使用SSH进行提交代码,需要在GIT Server上先安装SSH服务器,可以使用 apt-get 安装 SSH 服务器。
sudo apt-get install openssh-server
在服务器上安装好 ssh 之后,可以使用 ssh localhost 试着登录一下。在没做其他配置的情况下,一般会要求输入用户名和密码,之后会提示登录成功。可以在登录成功后,使用 ls -l 或者 ll 命令查看当前工作路径下有哪些文件和目录,之后,需要使用 exit 退出 ssh 登录。
在本地客户端上,可能需要创建隶属于 developers 组的用户,当然这一步并非必须。
$ sudo groupadd developers # 创建developers用户组
$ sudo mkdir -p /home/git # 创建主目录
$ sudo useradd git -d /home/git -g developers # 创建git用户,并制定其默认的工作路径和隶属的用户组
$ sudo passwd git # 为git设置密码
登录到系统,并使用 passwd username 为用户指定一个密码:
$ sudo passwd git # 为用户git指定密码为1234
之后你再次尝试一次,那么就会成功的把公钥发送给 GIT Server 了。可以使用 ssh git@xxxx 试一试,看看能不能免密码登录至 GIT 服务器上。
完成这些后,就可以上传自己的代码、或者从 Git server 上拉取代码了。
git remote add origin git@xxxx:/home/git/yourprojectgit
git push origin master
四、可能出现的错误
如果出现了类似的错误
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: POSSIBLE DNS SPOOFING DETECTED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
The RSA host key for net has changed,
and the key for the according IP address xxxxxxxxxx
is unknown This could either mean that
DNS SPOOFING is happening or the IP address for the host
and its host key have changed at the same time
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed
The fingerprint for the RSA key sent by the remote host is
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx
Please contact your system administrator
Add correct host key in /Users/user/ssh/known_hosts to get rid of this message
Offending key in /Users/user/ssh/known_hosts:5
RSA host key for net has changed and you have requested strict
checking
Host key verification failed
处理方法是,删除客户端的 ssh/known_hosts 文件。
icloud并不能直接作为远程git仓库使用,因为icloud上的文件并不可以直接访问,但可以作为本地git仓库使用。
大致思路是这样:
本地目录 《- git -》 本地git仓库(icloud目录) 《- icloud -》 icloud备份服务器
创建icloud目录本地的快捷访问路径(软链接)
在icloud中创建一个共享的git仓库(--bare相当于svn中的远程仓库概念)
以上,访问 ~/icloud/repos/demogit 就相当于访问了远程git仓库。
在任意目录下,初始化本地的git项目,配置远程git仓库,然后把本地的所有分支push到远程仓库。
从远程仓库中拉取项目。
类似本地svn仓库服务器一样,其实是搭建了本地的git仓库服务器。
由于是本地访问,所以通过 本地路径/projectgit 来访问。
因为本地仓库是建立在icloud自动备份的目录下,所以icloud会自动备份这个git仓库服务器。
如果本地机器有对外的IP,那么这个过程相当于建立了远程的git服务器,并对服务器上的git仓库进行了icloud的备份。
个人理解:
--bare就是建立一个git仓库服务器。既然是git仓库服务器,就没必要存储实际的workspace,只需要存储能生成workspace的文件即可。而对于git而言, git 目录才是仓库的核心。所以,--bare相当于只存储 git 目录。
查看服务器中的 XXXXgit 目录和本地的 git 目录,就能发现两者结构几乎一致。(正规的说法并不是这样)
http://winterbecom/posts/2014/11/27/setup-icloud-git-repository/
0条评论