Jade Dungeon

最简单的服务器配置

创建服务器

建立一个新的仓库名为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/

上面命令的含义如下。

  1. 新建新用户的主目录/home/git。
  2. 新建一个用户,用户名为git。
  3. 新建新用户的 SSH 目录/home/git/.ssh。
  4. 把当前用户的公钥拷贝给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里替换所有raspberrypigitpi。这个很容易忘记。

然后,重启你的树莓派。

添加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