对于不想给Github之类的代码托管掏钱的人.搭建一个自己的Git服务器很有必要
GIT
服务器搭建
1 2 3 4
| yum install git
sudo apt-get install git
|
1 2
| useradd git groupadd git
|
如果忘记git用户密码: sudo passwd git
重置即可
收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub
文件,
把所有公钥导入到/root/.ssh/authorized_keys
文件里,一行一个。
1 2 3 4
| git config --global user.email "code0809@163.com" git config --global user.name "SoulMate94."
ssh-keygen -t rsa -C "code0809@163.com"
|
1
| sudo git init --bare dirname.git
|
Git
就会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git
仓库纯粹是为了共享,
所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git
仓库通常都以.git
结尾。然后,把owner
改为git
:
1
| sudo chown -R git:git dirname.git
|
出于安全考虑,第二步创建的git
用户不允许登录shell
,这可以通过编辑/etc/passwd
文件完成。找到类似下面的一行:
1 2
| vim /etc/passwd git:x:1002:1002:,,,:/home/git:/bin/bash
|
改为:
1
| git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
|
这样,git
用户可以正常通过ssh
使用git
,但无法登录shell
,
因为我们为git
用户指定的git-shell
每次一登录就自动退出。
1 2 3 4
| git clone git@server:/dirname.git
Cloning into 'dirname'... warning: You appear to have cloned an empty repository.
|
添加远程仓库到本地
1 2
| git init git remote add origin git@server:/dirname.git
|
查看远程仓库
1 2 3 4 5
| git remote -v
例: origin git@47.91.221.85:/home/wwwroot/git/sample.git (fetch) origin git@47.91.221.85:/home/wwwroot/git/sample.git (push)
|
操作
1 2 3 4 5 6 7 8
| // 在第一次进行push时,我们加上-u参数,后期push时就不用再加-u参数 git push -u origin master
// 正常工作中 git pull origin master // 拉取仓库代码, 解决冲突 git add . // 将文件添加到本地版本库 git commit -m "注释" // 将文件修改提交到仓库 git push origin master // 这里origin 仅代表远程仓库在本地的连接名称
|
远程仓库操作命令:
1
| git clone git@server:/dirname.git
|
1
| git remote add remoteName(连接名) git@server:/dirname.git
|
1
| git remote rm remoteName(连接名)
|
1
| git remote set-url --push remoteName(连接名) git@server:/dirname.git
|
1
| git pull remoteName(连接名)
|
Git pull 强制覆盖本地文件 ?
1 2 3
| git fetch git reset git pull
|
1
| git push remoteNmae(连接名)
|
PHPStorm
连接远程服务器
- 首先打开
phpstorm
选择:Tools->Deployment->Configuration
远程服务器自动部署
sample
为自定义目录名称
sample.git/hooks/post-receive
1 2 3 4 5 6 7 8 9 10
| #!/bin/sh unset GIT_INDEX_FILE echo "=> update source code to the latest" while read oldrev newrev ref do branch=$(git rev-parse --symbolic --abbrev-ref $refname) echo "$branch" git --work-tree=/home/wwwroot/sample --git-dir=/home/wwwroot/git/sample.git git checkout $branch -f done
|
需要自定义:
--work-tree=/home/wwwroot/sample
是工作目录
--git-dir=/home/wwwroot/git/sample.git
是.git
目录
1 2 3 4 5 6 7 8 9 10 11
| [core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true ignorecase = true precomposeunicode = true worktree = /home/wwwroot/sample
[receive] denycurrentbranch = ignore
|
需要自定义:
worktree = /home/wwwroot/sample
是工作目录
用户权限设置
1 2 3 4 5 6 7 8
| chown -R git:git dirname.git
chown -R git:git .ssh
chown -R git:git work_dir
|
注意
配置里面不能有//
注释符!