最简单的服务器配置
创建服务器
建立一个新的仓库名为example.git
:
cd /home/git/gitroot git init --bare example.git
-
git init
:初始化一个 Git 仓库。 -
--bare
:表示新仓库不需要工作目录,只建立 Git 数据目录。 -
[仓库名].git
:指定仓库名,比如仓库名是example
, 那么就要建立一个叫做example.git
的 Git 数据目录。
执行这条命令以后,一个最简易的 Git 服务器就诞生了。 后面,我们就可以通过 SSH 连接,把本地代码推送到这个远程 Git 仓库了。
SSH账号与权限
sudo mkdir /home/git sudo useradd git sudo mkdir -m 700 /home/git/.ssh sudo cp ~/.ssh/authorized_keys /home/git/.ssh/
上面命令的含义如下。
- 新建新用户的主目录/home/git。
- 新建一个用户,用户名为git。
- 新建新用户的 SSH 目录/home/git/.ssh。
- 把当前用户的公钥拷贝给git用户。
如果你只用密码登录,不使用密钥登录,那么上面第三步和第四步是不需要的, 但是需要为git用户设定密码,命令如下:
sudo passwd git
本地拉取仓库
假定上一小节的远程服务器地址是git.myhost.com
,本地的 Git 仓库名为example
:
ssh git@git.myhost.com git init --bare example.git
上面命令中:
-
ssh git@git.myhost.com
表示以git用户的身份,登录到远程服务器。 -
后面的部分是 SSH 的一种语法,表示登录后在远程服务器执行的命令,
即新建一个远程 Git 数据目录
example.git
。
这条命令运行完,就有了一个 Git 服务器了,然后就可以推送代码了。
cd example git remote add myhost git@git.myhost:example.git git push myhost master
上面的命令先进入本地仓库,为远程服务器加一个别名,然后把代码推送过去。
另一种操作方法:
上面的例子使用git init --bare
命令,在远程服务器新建 Git 数据目录。
其实,Git 数据目录就是一个普通目录,直接从本地计算机拷贝过去也可以。
scp -r example/.git git@192.168.1.25:/home/git
上面的命令使用scp工具将本地的 example仓库里面的.git
子目录,
拷贝到远程服务器的目录example.git。这样也能建立 Git 服务器。
利用树莓派搭建Git私有服务器
安装Git
首先你需要在树莓派上安装Git.
sudo apt-get install wget git-core
这将会安装Git服务器和必要的客户端软件。
安装SSH
如果你还没有安装SSH,通过以下命令安装它:
sudo apt-get install ssh
通过以下命令启动它:
sudo /etc/init.d/ssh start
现在ssh已经运行起来了,但是一旦你重启树莓派,你还需要重新执行一遍上面命令。你 可以通过执行一次下面的命令来解决这个问题:
sudo update-rc.d ssh defaults
当你重启树莓派,SSH应该能够自动启动了。你可以看看能不能通过SSH连接到树莓派, 在你的Windows机器上使用Putty(Mac用户需要寻找替代的SSH客户端)。
在HostName文本框里输入树莓派的IP地址。通过以下命令找到你的树莓派IP:
/sbin/ifconfig
找到inet addr:
后面的就是IP。
改变主机名
这步不是必须的,如果有多台树莓派设备的话它们的名字都会一样,所以建议定一个名字
,如:gitpi
。
-
/etc/hostname
里改主机名。 -
/etc/hosts
里替换所有raspberrypi
为gitpi
。这个很容易忘记。
然后,重启你的树莓派。
添加Git用户和组
groupadd repogroup useradd john -d /home/john -g repogroup -s /usr/bin/zsh passwd john
/etc/group
文件中可以看到repogroup
中的多个用户:
repogroup:*:10005:john,marry,violet
其中,repogroup是准许接入这个仓库的组的名字。10005是一个独一无二的分组识别数字 ,marry,john,violet则是获准接入这个仓库的用户。
增加一个空的Git仓库(Git Repository)
这里以/home/git/gitroot
作为git仓库路径。
mkdir -p /home/git/gitroot chmod g+rx /home/git/gitroot chown :repogroup /home/git/gitroot
建立一个新的仓库名为example.git
:
cd /home/git/gitroot git init --bare example.git
建立路径认证,以允许用户组访问,同时有针对性的设置Git:
cd example.git chown -R :repogroup . git config core.sharedRepository group find . -type d -print0 | xargs -0 chmod 2770 # 设定所有目录的权限 find . -type f -print0 | xargs -0 chmod g=u # 设定所有文件的权限
在你的库中先放入一个文件(比如README)。为了避免其他用户在第一次提交时遇到奇怪 的错误信息时感到困惑,这是有必要的。
cd ~/myApp git clone myhost.example.com:/path-to/gitroot/example.git echo "Short project description" > README.txt git add README.txt git commit -a -m "Add README file" git push origin master # 第一次仅仅需要T"origin master" 这个参数
邮件通知
当有新的修改提交到仓库的时候,开发者们将会收到一封关于修改内容一览的电子邮件。
echo 'One-line project description' >description git config --local hooks.mailinglist email-a@example.com,email-b@example.com,... git config --local hooks.emailprefix '[DI-PR] ' git config --local hooks.showrev "git show -C %s; echo" git config --local hooks.emailmaxlines 100
通过设置一个称为钩子(hook)的东东,来创建这些email通知。
cd .git/hooks cp post-receive.sample post-receive chmod +x post-receive
从post-receive
的脚本中移除掉最后一行注释的#
字号,最后语句应该是这样的:
. /path-to-hooks/post-receive-email
密钥设置
首先要用户把公钥发给你。没有公钥的用户,必须用ssh-keygen命令来生成一个,然后
.ssh/id_rsa.pub
就是公钥。
之后你必须在他们对应的账户下面建立这种公/私钥配对。以用户user001
为例,复制他
的公钥,然后:
sudo su - user001 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
或/usr/local/libexec/git-core/git-shell
。
因此,对所有你想限制权限的用户,你可以执行以下命令。
sudo chsh -s /usr/libexec/git-core/git-shell user001
用户使用
用户取得现有的仓库
告诉你的用户,用下面的语句来克隆仓库到本地。
git clone myhost.example.com:/home/git/gitroot/newrepo.git
Push你的代码到Pi上
最终,我们会把代码push到树莓派上。首先,更改路径到你之前初始化的git仓库( 或初始化一个新的)。
加入一个新的远程主机(*你的IP地址没有中括号)
git remote add pi git@[your IP]:/home/git/example.git
现在你要做的就是add你的代码,commit然后push。
git add . git commit -am "Initial" git push pi master
如果你得到了一个类似这样的消息authenticity of host …
,只需要输入yes
然后
继续就可以了。
理想情况下,如果一切正常,你的Git仓库已经搭建在你的树莓派上了。
如果你想要测试一下,试着clone你的仓库到你的Windows机器上。首先更改路径到你希望 存储clone的地方(一个空文件夹),然后通过命令行(或git bash),运行:
git clone git@[your IP]:/home/git/example.git
如果你有任何问题,请到原博客地址留言。祝你好运!
把普通git仓库变成bare库
第一步,把git仓库下的.git
目录替换掉原来的目录:
mv my-project.git my-project.git.backup mv my-project.git.backup/.git my-project.git
第二步,把仓库转为bare库:
git config --bool core.bare true