最近单位购入一台Synology DS213J用做数据存储。java
本人打算将一些项目的源代码也放在上面,他自己的套件中心提供了SVN SERVER和GIT SERVER。git
设置SVN SERVER很是简单,基本上安装成功,设定帐号,便可使用。shell
可是GIT SERVER的架设遇到了麻烦,按照他的帮助说明,是没法成功的,通过尝试,发现其实就是写帮助的人少写了一点内容(也就是目录权限的修改),便可解决。服务器
现将解决方法记录以下,做为本身的备忘录,若是能帮助到有一样需求和一样麻烦的人,那么也是很开心的事情。网络
1.首先,进入DSM,而后在套件中心中找到GIT SERVER,下载安装便可。架构
2.看看DSM帮助中心对GIT SERVER使用的帮助:ssh
若要容许用户使用 Git: 请使用拥有管理权限的账户登陆 DSM。进入控制面板 > 终端机并启用 SSH 服务。 请启动 Git 套件,并选择用户以向其提供从资料库签入与签出文件的能力。 注: 经过称为 git-shell 的壳工具,Git 用户将被限制仅可进行 Git 相关活动。此登陆壳将应用于 Git 用户可进行确保这些账户仅用于 Git 操做。所以,Git 用户只能使用 SSH 链接来推拉 Git 存储库,而没有 DSM 彻底的访问权限。 若要建立 Git 存储库: 请经过 SSH 服务以 root 或 admin 身份登陆 Synology 服务器。 将目录更改成 /volumeX(X 为卷编号)以建立文件夹。例如,“git_repos”。该文件夹将拥有与 Linux 相同的权限。 请在该文件夹中运行 git init 来建立空存储库。 建立存储库后,Git 客户端用户可输入如下命令来访问该存储库: git clone ssh://[Git 用户]@[您的 Synology 服务器 IP 地址或主机名]/[Git 存储库路径]
这里鄙视一下写帮助的这我的,我严重怀疑群晖的工做人员是没有真的在他们机器上测试过GIT SERVER的。由于按照他帮助说的方法,你是不可能成功的。工具
遇到这个问题的时候我搜遍了网络,也没有第二我的有这个问题的描述,只是查找到很多从头安装GIT SERVER的文章,并且其中还充斥着不少无用的步骤。测试
3.正确的方法以下:命令行
安装成功以后,在DSM中建立一个GIT用户,好比我建立的用户为jackwong,而后进入DSM左上的功能菜单,打开GIT SERVER窗口,将容许访问GIT库的用户打上勾。好比我就将jackwong这个用户打上了勾。
而后进入控制面板 > 终端机并启用 SSH 服务。
到这一步,DSM的设置任务就完成了。
接着经过SSH链接到你的这个DS213J上。登录的时候固然采用root登录,密码就是admin的密码。
登录进去以后,就是Linux命令行操做了。
首先进入你的磁盘卷,通常名字是volumeX,X表示你建立的磁盘空间数量,通常这个机器就两个硬盘,通常就是volume1了
cd /volume1
接着建立一个git库目录
mkdir git_repos
而后再里面建立一个测试项目
cd git_repos
mkdir gittest
而后进入这个测试项目目录
cd gittest
进行GIT初始化
git init --bare
因为是root用户执行的操做,因此有一个最最重要的步骤,就是将这个宝库的整个目录的主人要修改成你的git用户
chown -R jackwong:users git_repos
若是你还想让其余用户也一块儿共享的话,
还须要将其余用户的权限设置为可写
chmod -R 775 git_repos
固然,这里的git_repos是整个库目录,我是为了省事情,若是不一样项目须要区别对待,那就对里面的项目目录进行设置就能够了。
总的原则就是某个用户要想能推送文件到服务器,必须打开这个用户对整个项目目录,包括子目录的写权限,不然就会失败。
到这里,服务器就设置完毕了。
在客户端进入git 命令行,测试一下是否能够下载和上传。
git clone ssh://jackwong@192.168.0.1/volume1/git_repos/gittest
而后再本地添加一个文件并提交到本地版本库中
echo "t1.txt" >t1.txt
git add t1.txt
git commit -m "add t1.txt"
最后测试一下推送到GIT SERVER上
git push origin master
显示成功!
若是要添加其余用户,只须要在DSM中建立帐号,而且在GIT SERVER界面中容许访问的勾打上。并保证这个用户在git_repos下的对应项目文件夹中具备写权限就能够了。
PS :GIT的使用和SVN这类中心式的架构有很大不一样。要把本地项目建立到GIT SERVER上,须要费点周折。
简单的说能够按照以下步骤:
1.先在本地建立项目,有个项目目录
2.而后在本地的这个项目目录中执行git --bare init进行初始化。
3.而后将须要提交的文件提交到本地
4.而后将项目目录COPY到服务器上,只COPY .git 目录就行,其余工做目录不用COPY的。
5.在本地就能够推送到远程服务器上了。
还有一种方法:
若是本地初始化的时候使用的是git init,那么推送就会出现问题。
解决方法是将本地的目录所有COPY到服务器上。
而后再服务器对应目录下面执行:
接着删除掉除.git目录以外的全部文件和目录便可。
这样本地就能顺利推送了。
固然直接使用
git clone --bare hello hello.gitgit config --bool core.bare true
这样直接导出裸库,而后将hello.git 这个目录直接上传到服务器上也能够。不过地址须要加上hello.git这个的目录。