Linux 架设使用 SSH 共享存取的 Git Server
Git 架设使用 HTTP 就是走 Web server 的权限, 走 SSH 就是各个帐号的权限. (Git 的 object 目录里面会有权限问题)
若多人共用的话, 要走 SSH 有下述几种方法:
- 建立新帐号(git), 由 git 帐号来统一管理(commit / push) 等
- 使用 gitosis 来管理(gitosis 可以设定到 "谁" 可以存取此专案).
- 使用 gitolite 来管理(gitolite 可以设定 "谁" 可以存取此专案, 而且, 可以设定只能存取哪个 branch 等路径)
在此篇是採用 建立一个 git 帐号来统一管理的方法.
相关资料准备
- 系统: Debian / Ubuntu Linux
- Server: example.com
- Project name: project_name
- Git Repository: /var/cache/git
系统套件安装
- apt-get install git-core
产生 SSH 公钥
- ssh-keygen -t rsa # 产生 id_rsa, id_rsa.pub
- mv id_rsa ~/.ssh/ # 将 id_rsa 放在 ~/.ssh/ 内.
- scp id_rsa.pub example.com:/tmp/id_rsa_user1.pub # 将 id_rsa.pub 丢到 Server 上, 大家的 public key 都需要传到 Server 上.
Git Server 设定
- ssh example.com
- adduser git --disabled-password # 建立一个 git 帐号, 所有动作都由 git 来执行, 可避免权限问题
- su - git # 切换成 git 权限
- cd; mkdir .ssh
- 将大家的 public key 加入 (可以远端透过 git 登入的问题, 会于后续设定解决)
- cat /tmp/id_rsa_user1.pub >> ~/.ssh/authorized_keys
- cat /tmp/id_rsa_user2.pub >> ~/.ssh/authorized_keys
- 註: commit / push 还是会保留原始 commit 人得名字, 不会是 git
建立 Git Repository
- ssh example.com
- su - git
- mkdir -p /var/cache/git/project_name.git
- cd /var/cache/git/project_name.git
- git init --bare --shared
新增资料到 Git Repository
于自己的电脑, 下述两种作法皆可:
- git clone [email protected]:/var/cache/git/project_name.git
- cd project_name
- vim test.txt
- git add .
- git commit -m 'add test.txt'
- git push origin master
或
- mkdir project_name
- cd project_name
- git init
- git add .
- git commit -m 'initial commit'
- git remote add origin [email protected]:/var/cache/git/project_name.git
- git push origin master
避免 Git 帐号登入 (安全问题)
- vim /etc/passwd # 修改 /bin/sh => /usr/bin/git-shell, git-shell 只能做 git 操作, 无法 Login.
将<font face="Courier New">git:x:1000:1000::/home/git:/bin/sh</font>
改成
<font face="Courier New">git:x:1000:1000::/home/git:<strong>/usr/bin/git-shell</strong></font>
即可.
常用指令笔记
- Clone: git clone [email protected]:/var/cache/git/project_name.git
- Commit & Push: git push
- 第一次 Commit / Push 的指令: git push origin master
相关推荐
projava 2020-11-14
WanKaShing 2020-11-12
airfish000 2020-09-11
tryfind 2020-09-14
yegen00 2020-09-10
kkaazz 2020-09-03
风语者 2020-09-02
BraveWangDev 2020-08-19
lichuanlong00 2020-08-15
gsl 2020-08-15
pandaphinex 2020-08-09
yhuihon 2020-08-09
CheNorton 2020-08-02
xiangqiao 2020-07-28
hpujsj 2020-07-26
hpujsj 2020-07-26
sshong 2020-07-19
BraveWangDev 2020-07-19
annan 2020-07-18