代码管理平台介绍
安装svn
1.svn是cs架构,所以我们需要安装一个服务端
[root@centos-01 ~]# yum install -y subversion
2.创建版本库(我们的项目代码放置的地方),并用svnadmin命令初始化一些文件
[root@centos-01 ~]# mkdir -p /data/svnroot/myproject
[root@centos-01 ~]# svnadmin create /data/svnroot/myproject/
[root@centos-01 ~]# ls -la !$
ls -la /data/svnroot/myproject/
总用量 8
drwxr-xr-x 6 root root 86 4月 26 06:32 .
drwxr-xr-x 3 root root 23 4月 26 06:31 ..
drwxr-xr-x 2 root root 54 4月 26 06:32 conf
drwxr-sr-x 6 root root 233 4月 26 06:32 db
-r--r--r-- 1 root root 2 4月 26 06:32 format
drwxr-xr-x 2 root root 231 4月 26 06:32 hooks
drwxr-xr-x 2 root root 41 4月 26 06:32 locks
-rw-r--r-- 1 root root 229 4月 26 06:32 README.txt
[root@centos-01 ~]#
3.进入conf文件有三个文件authz是控制权限的,passwd是密码文件,svnserve.conf是仓库的配置文件
[root@centos-01 ~]# cd !$/conf
cd /data/svnroot/myproject//conf
[root@centos-01 conf]# ls
authz passwd svnserve.conf
[root@centos-01 conf]#
4.编辑authz文件,在组中添加一个admins组加两个用户user1,user2
[groups]
# harry_and_sally = harry,sally
# harry_sally_and_joe = harry,sally,&joe
admins = user1,user2 (admin组有两个用户user1,user2)
[/](指的是/data/svnroot/myproject/目录)
@admins = rw(admins组下的用户有读写权限)
* = r (其他所有用户有读权限)
[myproject:/](另外一种写法,myproject是项目名)
user1 = rw(user1是读写)
5.创建用户和密码
[root@centos-01 conf]# vim passwd
[root@centos-01 conf]#
[users]
# harry = harryssecret
# sally = sallyssecret
user1 = user1
user2 = user2
6.编辑配置文件
[root@centos-01 conf]# vim svnserve.conf
[root@centos-01 conf]#
[general]
anon-access = none (匿名用户没有任何权限)
auth-access = write (被授权的用户有写的权限)
password-db = passwd (用户的密码文件)
authz-db = authz (权限控制文件)
realm = /data/svnroot/myproject (对哪一个项目生效)
7.启动svn(-d是后台模式启动)
[root@centos-01 conf]# svnserve -d -r /data/svnroot/
[root@centos-01 conf]#
[root@centos-01 conf]# ps aux|grep svn
root 4100 0.0 0.1 197136 1024 ? Ss 07:04 0:00 svnserve -d -r /data/svnroot/
root 4102 0.0 0.0 112664 932 pts/0 S+ 07:05 0:00 grep --color=auto svn
[root@centos-01 conf]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 4100/svnserve
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd
tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 1840/dnsmasq
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1089/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 984/cupsd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1624/master
tcp 0 0 192.168.133.44:27017 0.0.0.0:* LISTEN 1504/mongod
tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN 1504/mongod
tcp6 0 0 :::111 :::* LISTEN 1/systemd
tcp6 0 0 :::22 :::* LISTEN 1089/sshd
tcp6 0 0 ::1:631 :::* LISTEN 984/cupsd
tcp6 0 0 ::1:25 :::* LISTEN 1624/master
[root@centos-01 conf]#
8.清掉防火墙规则
[root@centos-01 conf]# iptables -F
[root@centos-01 conf]# iptables -nvL
Chain INPUT (policy ACCEPT 9 packets, 692 bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 10 packets, 924 bytes)
pkts bytes target prot opt in out source destination
[root@centos-01 conf]#
客户端上使用svn(linux)
1.在本机使用svn
[root@centos-01 conf]# cd /home/
[root@centos-01 home]# mkdir svntest
[root@centos-01 home]# cd svntest/
[root@centos-01 svntest]# ls
[root@centos-01 svntest]# svn checkout svn://192.168.133.44/myproject --username=user1
认证领域: <svn://192.168.133.44:3690> /data/svnroot/myproject
“user1”的密码:
-----------------------------------------------------------------------
注意! 你的密码,对于认证域:
<svn://192.168.133.44:3690> /data/svnroot/myproject
只能明文保存在磁盘上! 如果可能的话,请考虑配置你的系统,让 Subversion
可以保存加密后的密码。请参阅文档以获得详细信息。
你可以通过在“/root/.subversion/servers”中设置选项“store-plaintext-passwords”为“yes”或“no”,
来避免再次出现此警告。
-----------------------------------------------------------------------
保存未加密的密码(yes/no)?yes
取出版本 0。
[root@centos-01 svntest]# ls
myproject
[root@centos-01 svntest]# ls -la myproject/
总用量 0
drwxr-xr-x 3 root root 18 4月 26 07:17 .
drwxr-xr-x 3 root root 23 4月 26 07:17 ..
drwxr-xr-x 4 root root 75 4月 26 07:17 .svn
[root@centos-01 svntest]#
2.在另外一台机器使用svn(如果没有安装svn需要用yum安装)
[root@centos-02 ~]# cd /home/
[root@centos-02 home]# ls
elastic sunyujun sunyujun1 user1 user2
[root@centos-02 home]# svn checkout
svn: E205001: 请使用 “svn help” 以得到更多信息
svn: E205001: 没有提供足够的参数
[root@centos-02 home]# svn checkout svn://192.168.133.44/myproject --username=user1
认证领域: <svn://192.168.133.44:3690> /data/svnroot/myproject
“user1”的密码:
认证领域: <svn://192.168.133.44:3690> /data/svnroot/myproject
用户名: user1
“user1”的密码:
-----------------------------------------------------------------------
注意! 你的密码,对于认证域:
<svn://192.168.133.44:3690> /data/svnroot/myproject
只能明文保存在磁盘上! 如果可能的话,请考虑配置你的系统,让 Subversion
可以保存加密后的密码。请参阅文档以获得详细信息。
你可以通过在“/root/.subversion/servers”中设置选项“store-plaintext-passwords”为“yes”或“no”,
来避免再次出现此警告。
-----------------------------------------------------------------------
保存未加密的密码(yes/no)?yes
A myproject/123.txt
取出版本 1。
[root@centos-02 home]#
3.客户端上添加666.txt文件并svn提交
[root@centos-02 home]# ls
elastic myproject sunyujun sunyujun1 user1 user2
[root@centos-02 home]# cd myproject/
[root@centos-02 myproject]# ls
123.txt
[root@centos-02 myproject]# touch 666.txt
[root@centos-02 myproject]# ls
123.txt 666.txt
[root@centos-02 myproject]# svn add 666.txt
A 666.txt
[root@centos-02 myproject]# svn commit -m "add 666.txt"
正在增加 666.txt
传输文件数据.
提交后的版本为 2。
[root@centos-02 myproject]#
4.服务端更新
[root@centos-01 myproject]# ls
123.txt
[root@centos-01 myproject]# svn up
正在升级 '.':
A 666.txt
更新到版本 2。
[root@centos-01 myproject]#
5.我们第二次不用再输入密码了是因为系统已经记录了我们的密码
[root@centos-01 svn.simple]# pwd
/root/.subversion/auth/svn.simple
[root@centos-01 svn.simple]# cat 4b291284476d572783808d129e4feb70
K 8
passtype
V 6
simple
K 8
password
V 5
user1
K 15
svn:realmstring
V 51
<svn://192.168.133.44:3690> /data/svnroot/myproject
K 8
username
V 5
user1
END
[root@centos-01 svn.simple]#
6.修改文件内容并提交到svn,服务端更新
[root@centos-02 myproject]# ls
123.txt 666.txt
[root@centos-02 myproject]# vim 666.txt
[root@centos-02 myproject]# cat 666.txt
1111111
[root@centos-02 myproject]#
[root@centos-02 myproject]# svn commit -m "ch 666.txt"
正在发送 666.txt
传输文件数据.
提交后的版本为 3。
[root@centos-02 myproject]#
[root@centos-01 myproject]# ls
123.txt 666.txt
[root@centos-01 myproject]# svn up
正在升级 '.':
U 666.txt
更新到版本 3。
[root@centos-01 myproject]# cat 666.txt
1111111
[root@centos-01 myproject]#
7.svn删除文件
[root@centos-01 myproject]# ls
123.txt 666.txt
[root@centos-01 myproject]# svn delete 123.txt
D 123.txt
[root@centos-01 myproject]# svn commit -m "delete 123.txt"
正在删除 123.txt
提交后的版本为 4。
[root@centos-01 myproject]#
[root@centos-02 myproject]# svn up
正在升级 '.':
D 123.txt
更新到版本 4。
[root@centos-02 myproject]#
8.查看日志
[root@centos-02 myproject]# svn log
------------------------------------------------------------------------
r4 | user1 | 2018-04-26 08:00:13 +0800 (四, 2018-04-26) | 1 行
delete 123.txt
------------------------------------------------------------------------
r3 | user1 | 2018-04-26 07:55:22 +0800 (四, 2018-04-26) | 1 行
ch 666.txt
------------------------------------------------------------------------
r2 | user1 | 2018-04-26 07:42:55 +0800 (四, 2018-04-26) | 1 行
add 666.txt
------------------------------------------------------------------------
r1 | user1 | 2018-04-26 07:26:25 +0800 (四, 2018-04-26) | 1 行
add 123.txt
------------------------------------------------------------------------
[root@centos-02 myproject]#
客户端上使用svn(windows)
https://tortoisesvn.net/index.zh.html
1.svn checkout
单机上使用git(上)
1.git是分布式的,不依赖网络,我在我的电脑上使用git,你在你的电脑上使用git互不影响,不需要把代码更新到服务端上去。
2.安装git
[root@centos-01 ~]# yum install -y git
[root@centos-01 ~]# mkdir /data/gitroot
[root@centos-01 ~]# cd /data/gitroot/
[root@centos-01 gitroot]# ls
[root@centos-01 gitroot]# git init (初始化仓库,svn初始化仓库用svnadmin)
初始化空的 Git 版本库于 /data/gitroot/.git/
[root@centos-01 gitroot]# ls -la
总用量 0
drwxr-xr-x 3 root root 18 4月 26 23:19 .
drwxr-xr-x 5 root root 51 4月 26 23:18 ..
drwxr-xr-x 7 root root 119 4月 26 23:19 .git
[root@centos-01 gitroot]#
[root@centos-01 gitroot]# ls .git/
branches config description HEAD hooks info objects refs
[root@centos-01 gitroot]# vim 1.txt
[root@centos-01 gitroot]# cat 1.txt
aaaaaaaaaaaaaa
[root@centos-01 gitroot]# git add 1.txt
[root@centos-01 gitroot]# git commit -m "add 1.txt"
*** Please tell me who you are.
Run
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
to set your account's default identity.
Omit --global to set the identity only in this repository.
fatal: unable to auto-detect email address (got 'root@centos-01.(none)')
[root@centos-01 gitroot]# git config --global user.email "278108678@qq.com"
[root@centos-01 gitroot]# git config --global "phper"
error: key does not contain a section: phper
[root@centos-01 gitroot]# git config --global user.name "phper"
[root@centos-01 gitroot]# git commit -m "add 1.txt"
[master(根提交) 178684e] add 1.txt
1 file changed, 1 insertion(+)
create mode 100644 1.txt
[root@centos-01 gitroot]# vim 1.txt
[root@centos-01 gitroot]# cat 1.txt
aaaaaaaaaaaaaa
bbbbbbbbbbbbbb
[root@centos-01 gitroot]# git add 1.txt
[root@centos-01 gitroot]# git commit -m "add 1.txt"
[master 173e740] add 1.txt
1 file changed, 1 insertion(+)
[root@centos-01 gitroot]# git commit -m "add 1.txt agin"
# 位于分支 master
无文件要提交,干净的工作区
[root@centos-01 gitroot]# git status
# 位于分支 master
无文件要提交,干净的工作区
[root@centos-01 gitroot]# vim 1.txt
[root@centos-01 gitroot]# git status
# 位于分支 master
# 尚未暂存以备提交的变更:
# (使用 "git add <file>..." 更新要提交的内容)
# (使用 "git checkout -- <file>..." 丢弃工作区的改动)
#
# 修改: 1.txt
#
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
[root@centos-01 gitroot]# git diff 1.txt
diff --git a/1.txt b/1.txt
index 88cd09c..387c6e1 100644
--- a/1.txt
+++ b/1.txt
@@ -1,2 +1,3 @@
aaaaaaaaaaaaaa
bbbbbbbbbbbbbb
+cccccccccccccc
[root@centos-01 gitroot]#
[root@centos-01 gitroot]# git add 1.txt
[root@centos-01 gitroot]# git commit -m "add 1.txt agin"
[master 8cc5c90] add 1.txt agin
1 file changed, 1 insertion(+)
[root@centos-01 gitroot]# vim 1.txt
[root@centos-01 gitroot]# cat 1.txt
aaaaaaaaaaaaaa
bbbbbbbbbbbbbb
cccccccccccccc
dddddddddddddd
[root@centos-01 gitroot]# git add 1.txt; git commit -m "ch 1.txt agin"
[master 892a682] ch 1.txt agin
1 file changed, 1 insertion(+)
[root@centos-01 gitroot]# git log
commit 892a682ff335c779233b60e58d023e97ea6f0f7b
Author: phper <278108678@qq.com>
Date: Thu Apr 26 23:40:39 2018 +0800
ch 1.txt agin
commit 8cc5c9023033d1aedc9b01698437cddeef9bc504
Author: phper <278108678@qq.com>
Date: Thu Apr 26 23:39:31 2018 +0800
add 1.txt agin
commit 173e740090f5b7b5bf79169a7eb2e5de6a150f23
Author: phper <278108678@qq.com>
Date: Thu Apr 26 23:26:47 2018 +0800
add 1.txt
commit 178684eb053088a2db6879c0b1b1df805816cf6c
Author: phper <278108678@qq.com>
Date: Thu Apr 26 23:25:27 2018 +0800
[root@centos-01 gitroot]# cat /root/.gitconfig
[user]
email = 278108678@qq.com
name = phper
[root@centos-01 gitroot]#
1.回退到之前的某个版本
[root@centos-01 gitroot]# git log --pretty=oneline
892a682ff335c779233b60e58d023e97ea6f0f7b ch 1.txt agin
8cc5c9023033d1aedc9b01698437cddeef9bc504 add 1.txt agin
173e740090f5b7b5bf79169a7eb2e5de6a150f23 add 1.txt
178684eb053088a2db6879c0b1b1df805816cf6c add 1.txt
[root@centos-01 gitroot]# git reset --hard 173e740090f5
HEAD 现在位于 173e740 add 1.txt
[root@centos-01 gitroot]# git log --pretty=oneline
173e740090f5b7b5bf79169a7eb2e5de6a150f23 add 1.txt
178684eb053088a2db6879c0b1b1df805816cf6c add 1.txt
[root@centos-01 gitroot]# git reflog
173e740 HEAD@{0}: reset: moving to 173e740090f5
892a682 HEAD@{1}: commit: ch 1.txt agin
8cc5c90 HEAD@{2}: commit: add 1.txt agin
173e740 HEAD@{3}: commit: add 1.txt
178684e HEAD@{4}: commit (initial): add 1.txt
[root@centos-01 gitroot]# git reset --hard 892a682
HEAD 现在位于 892a682 ch 1.txt agin
[root@centos-01 gitroot]# git log --pretty=oneline
892a682ff335c779233b60e58d023e97ea6f0f7b ch 1.txt agin
8cc5c9023033d1aedc9b01698437cddeef9bc504 add 1.txt agin
173e740090f5b7b5bf79169a7eb2e5de6a150f23 add 1.txt
178684eb053088a2db6879c0b1b1df805816cf6c add 1.txt
[root@centos-01 gitroot]#
2.不小心删了文件
[root@centos-01 gitroot]# ls
1.txt
[root@centos-01 gitroot]# rm -f 1.txt
[root@centos-01 gitroot]# ls
[root@centos-01 gitroot]# git checkout -- 1.txt
[root@centos-01 gitroot]# ls
1.txt
[root@centos-01 gitroot]# vim 1.txt
[root@centos-01 gitroot]# cat 1.txt
aaaaaaaaaaaaaa
bbbbbbbbbbbbbb
cccccccccccccc
dddddddddddddd
eeeeeeeeeeeeee
[root@centos-01 gitroot]# git add 1.txt
[root@centos-01 gitroot]# git reset HEAD 1.txt (将上面add的标记去掉)
重置后撤出暂存区的变更:
M 1.txt
[root@centos-01 gitroot]#git checkout -- 1.txt(将代码库里面最新的文件搞回来)
3.删除文件
[root@centos-01 gitroot]# git rm 1.txt
error: '1.txt' 有本地修改
(使用 --cached 保存文件,或用 -f 强制删除)
[root@centos-01 gitroot]#
[root@centos-01 gitroot]# vim 1.txt
[root@centos-01 gitroot]# git checkout -- 1.txt
[root@centos-01 gitroot]# cat 1.txt
aaaaaaaaaaaaaa
bbbbbbbbbbbbbb
cccccccccccccc
dddddddddddddd
[root@centos-01 gitroot]# git rm 1.txt
rm '1.txt'
[root@centos-01 gitroot]# git commit -m "delete 1.txt"
[master eb733c2] delete 1.txt
1 file changed, 4 deletions(-)
delete mode 100644 1.txt
[root@centos-01 gitroot]# git checkout -- 1.txt
error: pathspec '1.txt' did not match any file(s) known to git.
[root@centos-01 gitroot]# git log --pretty=oneline
eb733c21800a28909e478756464ccc59ebab23dc delete 1.txt
892a682ff335c779233b60e58d023e97ea6f0f7b ch 1.txt agin
8cc5c9023033d1aedc9b01698437cddeef9bc504 add 1.txt agin
173e740090f5b7b5bf79169a7eb2e5de6a150f23 add 1.txt
178684eb053088a2db6879c0b1b1df805816cf6c add 1.txt
[root@centos-01 gitroot]# git reset --hard 892a682ff335c
HEAD 现在位于 892a682 ch 1.txt agin
[root@centos-01 gitroot]# ls
1.txt
[root@centos-01 gitroot]# cat 1.txt
aaaaaaaaaaaaaa
bbbbbbbbbbbbbb
cccccccccccccc
dddddddddddddd
[root@centos-01 gitroot]#
建立远程仓库
1.到github上注册一个账号,sign up注册一个账号,注册完成之后点击sign in登录,登录之后新建仓库。
2.点击创建仓库
3.创建秘钥,点击头像下面的setting
4.在客户端生成公钥放到github上去
[root@centos-01 ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
7a:0a:cb:9e:c0:5f:6b:1b:33:db:95:35:9b:43:6a:10 root@centos-01
The key's randomart image is:
+--[ RSA 2048]----+
| |
| |
| E |
| . |
| S + |
| . . . = + |
| o . * . = + |
| + =.X o . |
| .*.=.. |
+-----------------+
[root@centos-01 ~]# cat .ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDBTj3AjVScW1LoWdcbJLLwhgNcemhko3PMu8Sze9QePkvvCi49seQrcet9Yp9zxAVovs74tWHQPmfJ3h2OMx3GDk36b14O+8WpbKnZV/pN0PUX1ZvVVfw7v8t22SDHYm09jHHbzQJdiMK2T
J89RcKmE8d8D2Z9igInhdK2BEaGp4JYVQZdhchM58JcE+rvPcdsDhEhsA+z88UejWBGMZpJo1T8OCaK0OKPqKR7ZRt1kSlG78CDuHoldDu9HaKMm5ED/JxguC8EyIOLnnHTa/3kutMIEdK4ZOowlAEsgVmrKizMa7JvDOHhl5ycoaL8DD/rdh
aLquXX+8bRcgqXl385 root@centos-01
[root@centos-01 ~]#
5.git推送文件到github
[root@centos-01 tmp]# cd /tmp/
[root@centos-01 tmp]# mkdir linuxlearn
[root@centos-01 tmp]# cd linuxlearn/
[root@centos-01 linuxlearn]# echo "# linuxlearn" >> README.md
[root@centos-01 linuxlearn]# git init
初始化空的 Git 版本库于 /tmp/linuxlearn/.git/
[root@centos-01 linuxlearn]# ls -la
总用量 8
drwxr-xr-x 3 root root 35 5月 5 16:26 .
drwxrwxrwt. 19 root root 4096 5月 5 16:25 ..
drwxr-xr-x 7 root root 119 5月 5 16:26 .git
-rw-r--r-- 1 root root 13 5月 5 16:25 README.md
[root@centos-01 linuxlearn]# git add README.md
[root@centos-01 linuxlearn]# git commit -m "fldsjfds"
[master(根提交) a08b6ef] fldsjfds
1 file changed, 1 insertion(+)
create mode 100644 README.md
[root@centos-01 linuxlearn]# git remote add origin https://github.com/sunyujun/linuxlearn.git
6.验证发现推送成功
7.再次推送文件测试
[root@centos-01 ~]# cd /tmp/linuxlearn/
[root@centos-01 linuxlearn]# ls
README.md
[root@centos-01 linuxlearn]# vim 2.txt
[root@centos-01 linuxlearn]# cat 2.txt
111111111111111111
[root@centos-01 linuxlearn]# git add 2.txt
[root@centos-01 linuxlearn]# git commit -m "add 2.txt"
[master 21c6941] add 2.txt
1 file changed, 1 insertion(+)
create mode 100644 2.txt
[root@centos-01 linuxlearn]# git push
warning: push.default 未设置,它的默认值将会在 Git 2.0 由 'matching'
修改为 'simple'。若要不再显示本信息并在其默认值改变后维持当前使用习惯,
进行如下设置:
git config --global push.default matching
若要不再显示本信息并从现在开始采用新的使用习惯,设置:
git config --global push.default simple
参见 'git help config' 并查找 'push.default' 以获取更多信息。
('simple' 模式由 Git 1.7.11 版本引入。如果您有时要使用老版本的 Git,
为保持兼容,请用 'current' 代替 'simple' 模式)
Username for 'https://github.com': sunyujun
Password for 'https://sunyujun@github.com':
Counting objects: 4, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 267 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/sunyujun/linuxlearn.git
a08b6ef..21c6941 master -> master
[root@centos-01 linuxlearn]#
8.成功
克隆远程仓库
1.克隆远程的项目
[root@centos-01 linuxlearn]# cd /home/
[root@centos-01 home]# ls
sunyujun svntest user1 user2
[root@centos-01 home]# git clone git@github.com:aminglinux/lanmp.git
正克隆到 'lanmp'...
The authenticity of host 'github.com (13.229.188.59)' can't be established.
RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,13.229.188.59' (RSA) to the list of known hosts.
remote: Counting objects: 32, done.
接收对象中: 100% (32/32), 5.99 KiB | 0 bytes/s, done.
remote: Total 32 (delta 0), reused 0 (delta 0), pack-reused 32
处理 delta 中: 100% (6/6), done.
[root@centos-01 home]# ls
lanmp sunyujun svntest user1 user2
[root@centos-01 home]# cd lanmp/
[root@centos-01 lanmp]# ls
lanmp.sh README.md
[root@centos-01 lanmp]#
[root@centos-01 lanmp]# cat lanmp.sh
#!/bin/bash
## written by aming.
## 2015-06-24.
#######Begin########
echo "It will install lamp or lnmp."
sleep 1
##check last command is OK or not.
check_ok() {
if [ $? != 0 ]
then
echo "Error, Check the error log."
exit 1
fi
}
##get the archive of the system,i686 or x86_64.
ar=`arch`
##close seliux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
selinux_s=`getenforce`
if [ $selinux_s == "enforcing" ]
then
setenforce 0
fi
##close iptables
iptables-save > /etc/sysconfig/iptables_`date +%s`
iptables -F
service iptables save
##if the packge installed ,then omit.
myum() {
if ! rpm -qa|grep -q "^$1"
then
yum install -y $1
check_ok
else
echo $1 already installed.
fi
}
## install some packges.
for p in gcc wget perl perl-devel libaio libaio-devel pcre-devel zlib-devel
do
myum $p
done
##install epel.
if rpm -qa epel-release >/dev/null
then
rpm -e epel-release
fi
if ls /etc/yum.repos.d/epel-6.repo* >/dev/null 2>&1
then
rm -f /etc/yum.repos.d/epel-6.repo*
fi
wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/epel-6.repo
##function of installing mysqld.
install_mysqld() {
case $mysql_v in
5.1)
cd /usr/local/src
[ -f mysql-5.1.72-linux-$ar-glibc23.tar.gz ] || wget http://mirrors.sohu.com/mysql/MySQL-5.1/mysql-5.1.72-linux-$ar-glibc23.tar.gz
tar zxf mysql-5.1.72-linux-$ar-glibc23.tar.gz
check_ok
[ -d /usr/local/mysql ] && /bin/mv /usr/local/mysql /usr/local/mysql_`date +%s`
mv mysql-5.1.72-linux-$ar-glibc23 /usr/local/mysql
check_ok
if ! grep '^mysql:' /etc/passwd
then
useradd -M mysql -s /sbin/nologin
check_ok
fi
myum compat-libstdc++-33
[ -d /data/mysql ] && /bin/mv /data/mysql /data/mysql_`date +%s`
mkdir -p /data/mysql
chown -R mysql:mysql /data/mysql
cd /usr/local/mysql
./scripts/mysql_install_db --user=mysql --datadir=/data/mysql
check_ok
/bin/cp support-files/my-huge.cnf /etc/my.cnf
check_ok
sed -i '/^\[mysqld\]$/a\datadir = /data/mysql' /etc/my.cnf
/bin/cp support-files/mysql.server /etc/init.d/mysqld
sed -i 's#^datadir=#datadir=/data/mysql#' /etc/init.d/mysqld
chmod 755 /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on
service mysqld start
check_ok
break
;;
5.6)
cd /usr/local/src
[ -f mysql-5.6.26-linux-glibc2.5-$ar.tar.gz ] || wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.26-linux-glibc2.5-$ar.tar.gz
tar zxf mysql-5.6.26-linux-glibc2.5-$ar.tar.gz
check_ok
[ -d /usr/local/mysql ] && /bin/mv /usr/local/mysql /usr/local/mysql_bak
mv mysql-5.6.26-linux-glibc2.5-$ar /usr/local/mysql
if ! grep '^mysql:' /etc/passwd
then
useradd -M mysql -s /sbin/nologin
fi
myum compat-libstdc++-33
[ -d /data/mysql ] && /bin/mv /data/mysql /data/mysql_bak
mkdir -p /data/mysql
chown -R mysql:mysql /data/mysql
cd /usr/local/mysql
./scripts/mysql_install_db --user=mysql --datadir=/data/mysql
check_ok
/bin/cp support-files/my-default.cnf /etc/my.cnf
check_ok
sed -i '/^\[mysqld\]$/a\datadir = /data/mysql' /etc/my.cnf
/bin/cp support-files/mysql.server /etc/init.d/mysqld
sed -i 's#^datadir=#datadir=/data/mysql#' /etc/init.d/mysqld
chmod 755 /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on
service mysqld start
check_ok
break
;;
*)
echo "only 1(5.1) or 2(5.6)"
exit 1
;;
esac
}
##function of install httpd.
install_httpd() {
echo "Install apache version 2.2."
cd /usr/local/src
[ -f httpd-2.2.16.tar.gz ] || wget http://syslab.comsenz.com/downloads/linux/httpd-2.2.16.tar.gz
tar zxf httpd-2.2.16.tar.gz && cd httpd-2.2.16
check_ok
./configure \
--prefix=/usr/local/apache2 \
--with-included-apr \
--enable-so \
--enable-deflate=shared \
--enable-expires=shared \
--enable-rewrite=shared \
--with-pcre
check_ok
make && make install
check_ok
}
##function of install lamp's php.
install_php() {
echo -e "Install php.\nPlease chose the version of php."
case $php_v in
5.4)
cd /usr/local/src/
[ -f php-5.4.45.tar.bz2 ] || wget 'http://cn2.php.net/get/php-5.4.45.tar.bz2/from/this/mirror' -O php-5.4.45.tar.bz2
tar jxf php-5.4.45.tar.bz2 && cd php-5.4.45
for p in openssl-devel bzip2-devel \
libxml2-devel curl-devel libpng-devel \
libjpeg-devel freetype-devel libmcrypt-devel\
libtool-ltdl-devel perl-devel
do
myum $p
done
check_ok
./configure \
--prefix=/usr/local/php \
--with-apxs2=/usr/local/apache2/bin/apxs \
--with-config-file-path=/usr/local/php/etc \
--with-mysql=/usr/local/mysql \
--with-libxml-dir \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-iconv-dir \
--with-zlib-dir \
--with-bz2 \
--with-openssl \
--with-mcrypt \
--enable-soap \
--enable-gd-native-ttf \
--enable-mbstring \
--enable-sockets \
--enable-exif \
--disable-ipv6
check_ok
make && make install
check_ok
[ -f /usr/local/php/etc/php.ini ] || /bin/cp php.ini-production /usr/local/php/etc/php.ini
break
;;
5.6)
cd /usr/local/src/
[ -f php-5.6.6.tar.gz ] || wget http://mirrors.sohu.com/php/php-5.6.6.tar.gz
tar zxf php-5.6.6.tar.gz && cd php-5.6.6
for p in openssl-devel bzip2-devel \
libxml2-devel curl-devel libpng-devel \
libjpeg-devel freetype-devel libmcrypt-devel\
libtool-ltdl-devel perl-devel
do
myum $p
done
./configure \
--prefix=/usr/local/php \
--with-apxs2=/usr/local/apache2/bin/apxs \
--with-config-file-path=/usr/local/php/etc \
--with-mysql=/usr/local/mysql \
--with-libxml-dir \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-iconv-dir \
--with-zlib-dir \
--with-bz2 \
--with-openssl \
--with-mcrypt \
--enable-soap \
--enable-gd-native-ttf \
--enable-mbstring \
--enable-sockets \
--enable-exif \
--disable-ipv6
check_ok
make && make install
check_ok
[ -f /usr/local/php/etc/php.ini ] || /bin/cp php.ini-production /usr/local/php/etc/php.ini
break
;;
*)
echo "only 1(5.4) or 2(5.6)"
;;
esac
}
##function of apache and php configue.
join_apa_php() {
sed -i '/AddType .*.gz .tgz$/a\AddType application\/x-httpd-php .php' /usr/local/apache2/conf/httpd.conf
check_ok
sed -i 's/DirectoryIndex index.html/DirectoryIndex index.php index.html index.htm/' /usr/local/apache2/conf/httpd.conf
check_ok
cat > /usr/local/apache2/htdocs/index.php <<EOF
<?php
phpinfo();
?>
EOF
if /usr/local/php/bin/php -i |grep -iq 'date.timezone => no value'
then
sed -i '/;date.timezone =$/a\date.timezone = "Asia\/Chongqing"' /usr/local/php/etc/php.ini
fi
/usr/local/apache2/bin/apachectl restart
check_ok
}
##function of check service is running or not, example nginx, httpd, php-fpm.
check_service() {
if [ "$1" == "phpfpm" ]
then
s="php-fpm"
else
s=$1
fi
n=`ps aux |grep "$s"|wc -l`
if [ $n -gt 1 ]
then
echo "$1 service is already started."
else
if [ -f /etc/init.d/$1 ]
then
/etc/init.d/$1 start
check_ok
else
install_$1
fi
fi
}
##function of install lamp
lamp() {
check_service mysqld
check_service httpd
install_php
join_apa_php
echo "LAMP done,Please use 'http://your ip/index.php' to access."
}
##function of install nginx
install_nginx() {
cd /usr/local/src
[ -f nginx-1.8.0.tar.gz ] || wget http://nginx.org/download/nginx-1.8.0.tar.gz
tar zxf nginx-1.8.0.tar.gz
cd nginx-1.8.0
myum pcre-devel
./configure --prefix=/usr/local/nginx
check_ok
make && make install
check_ok
if [ -f /etc/init.d/nginx ]
then
/bin/mv /etc/init.d/nginx /etc/init.d/nginx_`date +%s`
fi
curl http://www.apelearn.com/study_v2/.nginx_init -o /etc/init.d/nginx
check_ok
chmod 755 /etc/init.d/nginx
chkconfig --add nginx
chkconfig nginx on
curl http://www.apelearn.com/study_v2/.nginx_conf -o /usr/local/nginx/conf/nginx.conf
check_ok
service nginx start
check_ok
echo -e "<?php\n phpinfo();\n?>" > /usr/local/nginx/html/index.php
check_ok
}
##function of install php-fpm
install_phpfpm() {
echo -e "Install php.\nPlease chose the version of php."
case $php_v in
5.4)
cd /usr/local/src/
[ -f php-5.4.45.tar.bz2 ] || wget 'http://cn2.php.net/get/php-5.4.45.tar.bz2/from/this/mirror' -O php-5.4.45.tar.bz2
tar jxf php-5.4.45.tar.bz2 && cd php-5.4.45
for p in openssl-devel bzip2-devel \
libxml2-devel curl-devel libpng-devel \
libjpeg-devel freetype-devel libmcrypt-devel\
libtool-ltdl-devel perl-devel
do
myum $p
done
if ! grep -q '^php-fpm:' /etc/passwd
then
useradd -M -s /sbin/nologin php-fpm
check_ok
fi
./configure \
--prefix=/usr/local/php-fpm \
--with-config-file-path=/usr/local/php-fpm/etc \
--enable-fpm \
--with-fpm-user=php-fpm \
--with-fpm-group=php-fpm \
--with-mysql=/usr/local/mysql \
--with-mysql-sock=/tmp/mysql.sock \
--with-libxml-dir \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-iconv-dir \
--with-zlib-dir \
--with-mcrypt \
--enable-soap \
--enable-gd-native-ttf \
--enable-ftp \
--enable-mbstring \
--enable-exif \
--enable-zend-multibyte \
--disable-ipv6 \
--with-pear \
--with-curl \
--with-openssl
check_ok
make && make install
check_ok
[ -f /usr/local/php-fpm/etc/php.ini ] || /bin/cp php.ini-production /usr/local/php-fpm/etc/php.ini
if /usr/local/php-fpm/bin/php -i |grep -iq 'date.timezone => no value'
then
sed -i '/;date.timezone =$/a\date.timezone = "Asia\/Chongqing"' /usr/local/php-fpm/etc/php.ini
check_ok
fi
[ -f /usr/local/php-fpm/etc/php-fpm.conf ] || curl http://www.apelearn.com/study_v2/.phpfpm_conf -o /usr/local/php-fpm/etc/php-fpm.conf
[ -f /etc/init.d/phpfpm ] || /bin/cp sapi/fpm/init.d.php-fpm /etc/init.d/phpfpm
chmod 755 /etc/init.d/phpfpm
chkconfig phpfpm on
service phpfpm start
check_ok
break
;;
5.6)
cd /usr/local/src/
[ -f php-5.6.6.tar.gz ] || wget http://mirrors.sohu.com/php/php-5.6.6.tar.gz
tar zxf php-5.6.6.tar.gz && cd php-5.6.6
for p in openssl-devel bzip2-devel \
libxml2-devel curl-devel libpng-devel \
libjpeg-devel freetype-devel libmcrypt-devel\
libtool-ltdl-devel perl-devel
do
myum $p
done
if ! grep -q '^php-fpm:' /etc/passwd
then
useradd -M -s /sbin/nologin php-fpm
fi
check_ok
./configure \
--prefix=/usr/local/php-fpm \
--with-config-file-path=/usr/local/php-fpm/etc \
--enable-fpm \
--with-fpm-user=php-fpm \
--with-fpm-group=php-fpm \
--with-mysql=/usr/local/mysql \
--with-mysql-sock=/tmp/mysql.sock \
--with-libxml-dir \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-iconv-dir \
--with-zlib-dir \
--with-mcrypt \
--enable-soap \
--enable-gd-native-ttf \
--enable-ftp \
--enable-mbstring \
--enable-exif \
--disable-ipv6 \
--with-pear \
--with-curl \
--with-openssl
check_ok
make && make install
check_ok
[ -f /usr/local/php-fpm/etc/php.ini ] || /bin/cp php.ini-production /usr/local/php-fpm/etc/php.ini
if /usr/local/php-fpm/bin/php -i |grep -iq 'date.timezone => no value'
then
sed -i '/;date.timezone =$/a\date.timezone = "Asia\/Chongqing"' /usr/local/php-fpm/etc/php.ini
check_ok
fi
[ -f /usr/local/php-fpm/etc/php-fpm.conf ] || curl http://www.apelearn.com/study_v2/.phpfpm_conf -o /usr/local/php-fpm/etc/php-fpm.conf
check_ok
[ -f /etc/init.d/phpfpm ] || /bin/cp sapi/fpm/init.d.php-fpm /etc/init.d/phpfpm
chmod 755 /etc/init.d/phpfpm
chkconfig phpfpm on
service phpfpm start
check_ok
break
;;
*)
echo 'only 1(5.4) or 2(5.6)'
;;
esac
}
##function of install lnmp
lnmp() {
check_service mysqld
check_service nginx
check_service phpfpm
echo "The lnmp done, Please use 'http://your ip/index.php' to access."
}
read -p "Please chose which type env you install, (lamp|lnmp)? " t
case $t in
lamp)
read -p "Please chose the version of mysql. (5.1|5.6)" mysql_v
read -p "Please chose the version of php. (5.4|5.6)" php_v
lamp
;;
lnmp)
read -p "Please chose the version of mysql. (5.1|5.6)" mysql_v
read -p "Please chose the version of php. (5.4|5.6)" php_v
lnmp
;;
*)
echo "Only 'lamp' or 'lnmp' your can input."
;;
esac
##111111
##########end##############
[root@centos-01 lanmp]#
2.更改README.md文件添加CCCCC,提示我没有权限,看来是不能更改了
[root@centos-01 lanmp]# vim README.md
[root@centos-01 lanmp]# cat README.md
# lanmp
lamp/lnmp 一键安装脚本
author: aming
version: 0.2
aaaaa
as
df
asd
f
bbbbb
CCCCC
[root@centos-01 lanmp]# git add README.md
[root@centos-01 lanmp]# git commit -m "change README.md"
[master efffdbe] change README.md
1 file changed, 1 insertion(+)
[root@centos-01 lanmp]# git push
warning: push.default 未设置,它的默认值将会在 Git 2.0 由 'matching'
修改为 'simple'。若要不再显示本信息并在其默认值改变后维持当前使用习惯,
进行如下设置:
git config --global push.default matching
若要不再显示本信息并从现在开始采用新的使用习惯,设置:
git config --global push.default simple
参见 'git help config' 并查找 'push.default' 以获取更多信息。
('simple' 模式由 Git 1.7.11 版本引入。如果您有时要使用老版本的 Git,
为保持兼容,请用 'current' 代替 'simple' 模式)
Warning: Permanently added the RSA host key for IP address '13.250.177.223' to the list of known hosts.
ERROR: Permission to aminglinux/lanmp.git denied to sunyujun.
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
[root@centos-01 lanmp]#
3.如果线上的更改了,我们客户端相同步该怎么办,用git pull拉下来
[root@centos-01 lanmp]# git pull
Already up-to-date.
[root@centos-01 lanmp]#
分支管理
1.查看仓库中都有哪些分支
[root@centos-01 lanmp]# cd /data/gitroot/
[root@centos-01 gitroot]# git branch
* master
[root@centos-01 gitroot]#
2.创建新分支
[root@centos-01 gitroot]# git branch syj
[root@centos-01 gitroot]# git branch
* master
syj
[root@centos-01 gitroot]#
3.切换分支
[root@centos-01 gitroot]# git checkout syj
切换到分支 'syj'
[root@centos-01 gitroot]#
4.星号到了syj分支上代表当前在syj分支中
[root@centos-01 gitroot]# git branch
master
* syj
[root@centos-01 gitroot]#
5.我们在syj分支下创建一个新的文件2.txt,然后提交,然后再切换到master分支发现没有这个2.txt文件,说明分支是相互隔离开的。
[root@centos-01 ~]# cd /data/gitroot/
[root@centos-01 gitroot]# git branch
master
* syj
[root@centos-01 gitroot]# ls
1.txt
[root@centos-01 gitroot]# vim 2.txt
[root@centos-01 gitroot]# cat 2.txt
2222222222
[root@centos-01 gitroot]# git add .
[root@centos-01 gitroot]# git commit -m "add 2.txt"
[syj db5eca6] add 2.txt
1 file changed, 1 insertion(+)
create mode 100644 2.txt
[root@centos-01 gitroot]# git checkout master
切换到分支 'master'
[root@centos-01 gitroot]# ls
1.txt
[root@centos-01 gitroot]#
1.我们想让两个分支合并,首先需要切换到目标分支下,然后使用git merge syj命令将syj分支下的变更同步到master上来
[root@centos-01 gitroot]# git checkout master
已经位于 'master'
[root@centos-01 gitroot]# git merge syj
更新 892a682..db5eca6
Fast-forward
2.txt | 1 +
1 file changed, 1 insertion(+)
create mode 100644 2.txt
[root@centos-01 gitroot]# ls
1.txt 2.txt
[root@centos-01 gitroot]#
2.现在我们做一个合并冲突的实验,我们给master分支下的2.txt文件增加一些内容,给syj分支下的2.txt文件删除一些内容,然后合并分支试试。
[root@centos-01 gitroot]# vim 2.txt
[root@centos-01 gitroot]# cat 2.txt
2222222222
3333333333
[root@centos-01 gitroot]# git add 2.txt
[root@centos-01 gitroot]# git commit -m "ch 2.txt"
[master 5e371af] ch 2.txt
1 file changed, 1 insertion(+)
[root@centos-01 gitroot]# git checkout syj
切换到分支 'syj'
[root@centos-01 gitroot]# vim 2.txt
[root@centos-01 gitroot]# cat 2.txt
2
[root@centos-01 gitroot]# git add 2.txt
[root@centos-01 gitroot]# git commit -m "ch 2.txt"
[syj 9c66db9] ch 2.txt
1 file changed, 1 insertion(+), 1 deletion(-)
[root@centos-01 gitroot]# git checkout master
切换到分支 'master'
[root@centos-01 gitroot]# git merge syj
自动合并 2.txt
冲突(内容):合并冲突于 2.txt
自动合并失败,修正冲突然后提交修正的结果。
[root@centos-01 gitroot]#
3.我们编辑两个分支下的2.txt文件两者保持一致。
[root@centos-01 gitroot]# vim 2.txt
[root@centos-01 gitroot]# cat 2.txt
<<<<<<< HEAD
2222222222
3333333333
=======
2
>>>>>>> syj
[root@centos-01 gitroot]# vim 2.txt
[root@centos-01 gitroot]# cat 2.txt
2
[root@centos-01 gitroot]# git checkout syj
2.txt: needs merge
error: 您需要先解决当前索引的冲突
[root@centos-01 gitroot]# git add 2.txt
[root@centos-01 gitroot]# git commit -m "ch 2.txt"
[master 7b11106] ch 2.txt
[root@centos-01 gitroot]# git merge syj
Already up-to-date.
[root@centos-01 gitroot]# git checkout syj
切换到分支 'syj'
[root@centos-01 gitroot]# cat 2.txt
2
4.删除分支(-D强制删除分支)
[root@centos-01 gitroot]# git checkout master
切换到分支 'master'
[root@centos-01 gitroot]# git branch -d syj
已删除分支 syj(曾为 9c66db9)。
[root@centos-01 gitroot]#
远程分支管理
1.我们先创建一个新文件
2.接着我们创建一个新的分支dev
3.下面我们克隆一下远程的仓库
4.我们克隆完成之后发现克隆的分支里只有master,我们远程其实是有两个分支,还有一个dev
[root@centos-01 tmp]# git clone https://github.com/sunyujun/linuxlearn.git
正克隆到 'linuxlearn'...
remote: Counting objects: 9, done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 9 (delta 1), reused 5 (delta 0), pack-reused 0
Unpacking objects: 100% (9/9), done.
[root@centos-01 tmp]# cd linuxlearn/
[root@centos-01 linuxlearn]# ls
2.txt linux.doc README.md
[root@centos-01 linuxlearn]# git branch
* master
[root@centos-01 linuxlearn]#
5.查看远程服务器的分支
[root@centos-01 linuxlearn]# git ls-remote origin
26359e748fd0482441e6b24fec1b73689774f8f9 HEAD
26359e748fd0482441e6b24fec1b73689774f8f9 refs/heads/dev
26359e748fd0482441e6b24fec1b73689774f8f9 refs/heads/master
[root@centos-01 linuxlearn]#
6.切换分支到dev
[root@centos-01 linuxlearn]# git checkout -b dev origin/dev
分支 dev 设置为跟踪来自 origin 的远程分支 dev。
切换到一个新分支 'dev'
[root@centos-01 linuxlearn]# git branch
* dev
master
[root@centos-01 linuxlearn]#
7.在dev分支下新建一个文件3.txt并推送到远程服务器
[root@centos-01 linuxlearn]# ls
2.txt linux.doc README.md
[root@centos-01 linuxlearn]# vim 3.txt
[root@centos-01 linuxlearn]# cat 3.txt
3333333333
[root@centos-01 linuxlearn]# git add 3.txt
[root@centos-01 linuxlearn]# git commit -m "ch 3.txt"
[dev 9bafd0e] ch 3.txt
1 file changed, 1 insertion(+)
create mode 100644 3.txt
[root@centos-01 linuxlearn]# git push
warning: push.default 未设置,它的默认值将会在 Git 2.0 由 'matching'
修改为 'simple'。若要不再显示本信息并在其默认值改变后维持当前使用习惯,
进行如下设置:
git config --global push.default matching
若要不再显示本信息并从现在开始采用新的使用习惯,设置:
git config --global push.default simple
参见 'git help config' 并查找 'push.default' 以获取更多信息。
('simple' 模式由 Git 1.7.11 版本引入。如果您有时要使用老版本的 Git,
为保持兼容,请用 'current' 代替 'simple' 模式)
Username for 'https://github.com': sunyujun
Password for 'https://sunyujun@github.com':
Counting objects: 4, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 254 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To https://github.com/sunyujun/linuxlearn.git
26359e7..9bafd0e dev -> dev
[root@centos-01 linuxlearn]#
8.只推dev分支
[root@centos-01 linuxlearn]# git push origin dev
Username for 'https://github.com': sunyujun
Password for 'https://sunyujun@github.com':
Everything up-to-date
[root@centos-01 linuxlearn]#
9.将客户端新建的分支推到远程客户端
[root@centos-01 linuxlearn]# git branch dev2
[root@centos-01 linuxlearn]# git branch
* dev
dev2
master
[root@centos-01 linuxlearn]# git checkout dev2
切换到分支 'dev2'
[root@centos-01 linuxlearn]# ls
2.txt 3.txt linux.doc README.md
[root@centos-01 linuxlearn]# vim 4.txt
[root@centos-01 linuxlearn]# cat 4.txt
444444444444
[root@centos-01 linuxlearn]# git add 4.txt
[root@centos-01 linuxlearn]# git commit -m "add 4.txt"
[dev2 f3bea1d] add 4.txt
1 file changed, 1 insertion(+)
create mode 100644 4.txt
[root@centos-01 linuxlearn]# git push origin dev2
Username for 'https://github.com': sunyujun
Password for 'https://sunyujun@github.com':
Counting objects: 4, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 256 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To https://github.com/sunyujun/linuxlearn.git
* [new branch] dev2 -> dev2
[root@centos-01 linuxlearn]#
标签管理
1.
[root@centos-01 linuxlearn]# git checkout master
切换到分支 'master'
[root@centos-01 linuxlearn]# git tag v1.0
[root@centos-01 linuxlearn]# git tag
v1.0
[root@centos-01 linuxlearn]# git show v1.0
commit 26359e748fd0482441e6b24fec1b73689774f8f9
Author: sunyujun <278108678@qq.com>
Date: Sun May 6 09:25:26 2018 +0800
Create linux.doc
diff --git a/linux.doc b/linux.doc
new file mode 100644
index 0000000..a08e1f3
--- /dev/null
+++ b/linux.doc
@@ -0,0 +1 @@
+linux
[root@centos-01 linuxlearn]# git log --pretty=oneline
26359e748fd0482441e6b24fec1b73689774f8f9 Create linux.doc
21c6941c478471a8f192bd93c359759422d75aa3 add 2.txt
a08b6ef1d0d706437114974776e83a9e659bc378 fldsjfds
[root@centos-01 linuxlearn]# git tag v0.8 21c6941c4784
[root@centos-01 linuxlearn]# git tag
v0.8
v1.0
[root@centos-01 linuxlearn]# git log --pretty=oneline --abbrev-commit
26359e7 Create linux.doc
21c6941 add 2.txt
a08b6ef fldsjfds
[root@centos-01 linuxlearn]# git tag -a v0.1 -m "first tag" a08b6ef
[root@centos-01 linuxlearn]# git tag
v0.1
v0.8
v1.0
[root@centos-01 linuxlearn]# git show v0.1
tag v0.1
Tagger: phper <278108678@qq.com>
Date: Tue May 8 06:34:26 2018 +0800
first tag
commit a08b6ef1d0d706437114974776e83a9e659bc378
Author: phper <278108678@qq.com>
Date: Sat May 5 16:29:12 2018 +0800
fldsjfds
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..eb983dd
--- /dev/null
+++ b/README.md
@@ -0,0 +1 @@
+# linuxlearn
...skipping...
tag v0.1
Tagger: phper <278108678@qq.com>
Date: Tue May 8 06:34:26 2018 +0800
first tag
commit a08b6ef1d0d706437114974776e83a9e659bc378
Author: phper <278108678@qq.com>
Date: Sat May 5 16:29:12 2018 +0800
fldsjfds
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..eb983dd
--- /dev/null
+++ b/README.md
@@ -0,0 +1 @@
+# linuxlearn
...skipping...
tag v0.1
Tagger: phper <278108678@qq.com>
Date: Tue May 8 06:34:26 2018 +0800
first tag
commit a08b6ef1d0d706437114974776e83a9e659bc378
Author: phper <278108678@qq.com>
Date: Sat May 5 16:29:12 2018 +0800
fldsjfds
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..eb983dd
--- /dev/null
+++ b/README.md
@@ -0,0 +1 @@
+# linuxlearn
...skipping...
tag v0.1
Tagger: phper <278108678@qq.com>
Date: Tue May 8 06:34:26 2018 +0800
first tag
commit a08b6ef1d0d706437114974776e83a9e659bc378
Author: phper <278108678@qq.com>
Date: Sat May 5 16:29:12 2018 +0800
fldsjfds
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..eb983dd
--- /dev/null
+++ b/README.md
@@ -0,0 +1 @@
+# linuxlearn
...skipping...
tag v0.1
Tagger: phper <278108678@qq.com>
Date: Tue May 8 06:34:26 2018 +0800
first tag
commit a08b6ef1d0d706437114974776e83a9e659bc378
Author: phper <278108678@qq.com>
Date: Sat May 5 16:29:12 2018 +0800
fldsjfds
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..eb983dd
--- /dev/null
+++ b/README.md
@@ -0,0 +1 @@
+# linuxlearn
...skipping...
tag v0.1
Tagger: phper <278108678@qq.com>
Date: Tue May 8 06:34:26 2018 +0800
first tag
commit a08b6ef1d0d706437114974776e83a9e659bc378
Author: phper <278108678@qq.com>
Date: Sat May 5 16:29:12 2018 +0800
fldsjfds
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..eb983dd
--- /dev/null
+++ b/README.md
@@ -0,0 +1 @@
+# linuxlearn
[root@centos-01 linuxlearn]#
2.删除一个tag
[root@centos-01 linuxlearn]# git tag -d v0.1
已删除 tag 'v0.1'(曾为 9739c3d)
[root@centos-01 linuxlearn]# git push origin v1.0 (推送一个tag)
Username for 'https://github.com': sunyujun
Password for 'https://sunyujun@github.com':
Total 0 (delta 0), reused 0 (delta 0)
To https://github.com/sunyujun/linuxlearn.git
* [new tag] v1.0 -> v1.0
[root@centos-01 linuxlearn]#
3.将所有的tag推送到远程
[root@centos-01 linuxlearn]# git push --tag origin
Username for 'https://github.com': sunyujun
Password for 'https://sunyujun@github.com':
Total 0 (delta 0), reused 0 (delta 0)
To https://github.com/sunyujun/linuxlearn.git
* [new tag] v0.8 -> v0.8
[root@centos-01 linuxlearn]#
4.远程同步删除tag
[root@centos-01 linuxlearn]# git tag
v0.8
v1.0
[root@centos-01 linuxlearn]# git tag -d v0.8
已删除 tag 'v0.8'(曾为 21c6941)
[root@centos-01 linuxlearn]# git tag
v1.0
[root@centos-01 linuxlearn]# git push origin :refs/tags/v0.8
Username for 'https://github.com': sunyujun
Password for 'https://sunyujun@github.com':
To https://github.com/sunyujun/linuxlearn.git
- [deleted] v0.8
[root@centos-01 linuxlearn]#
git别名
1.commit的别名改成ci
[root@centos-01 linuxlearn]# git config --global alias.ci commit
[root@centos-01 linuxlearn]# ls
2.txt linux.doc README.md
[root@centos-01 linuxlearn]# vim 3.txt
[root@centos-01 linuxlearn]# cat 3.txt
3333333333333
[root@centos-01 linuxlearn]# git add 3.txt
[root@centos-01 linuxlearn]# git ci -m "add 3.txt"
[master b299542] add 3.txt
1 file changed, 1 insertion(+)
create mode 100644 3.txt
[root@centos-01 linuxlearn]#
2.查看git别名使用的命令
[root@centos-01 linuxlearn]# git config --list |grep alias
alias.ci=commit
[root@centos-01 linuxlearn]#
3.查看log
4.取消别名
[root@centos-01 linuxlearn]# git config --global --unset alias.ci
搭建git服务器
1.首先安装git
[root@centos-02 ~]# yum install -y git
2.禁止git用户远程登录
[root@centos-02 ~]# useradd -s /usr/bin/git-shell git
[root@centos-02 ~]# cd /home/git/
[root@centos-02 git]# ls
[root@centos-02 git]# mkdir .ssh
[root@centos-02 git]# touch .ssh/authorized_keys
[root@centos-02 git]# chmod 600 .ssh/authorized_keys
[root@centos-02 git]# chown -R git:git .ssh
[root@centos-02 git]#
3.在01服务器上将公钥放到02服务器的git家目录authorized_keys文件中
[root@centos-01 ~]# cat .ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDBTj3AjVScW1LoWdcbJLLwhgNcemhko3PMu8Sze9QePkvvCi49seQrcet9Yp9zxAVovs74tWHQPmfJ3h2OMx3GDk36b14O+8WpbKnZV/pN0PUX1ZvVVfw7v8t22SDHYm09jHHbzQJdiMK2TJ
89RcKmE8d8D2Z9igInhdK2BEaGp4JYVQZdhchM58JcE+rvPcdsDhEhsA+z88UejWBGMZpJo1T8OCaK0OKPqKR7ZRt1kSlG78CDuHoldDu9HaKMm5ED/JxguC8EyIOLnnHTa/3kutMIEdK4ZOowlAEsgVmrKizMa7JvDOHhl5ycoaL8DD/rdhaL
quXX+8bRcgqXl385 root@centos-01
[root@centos-01 ~]#
[root@centos-02 git]# vim .ssh/authorized_keys
[root@centos-02 git]# cat .ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDBTj3AjVScW1LoWdcbJLLwhgNcemhko3PMu8Sze9QePkvvCi49seQrcet9Yp9zxAVovs74tWHQPmfJ3h2OMx3GDk36b14O+8WpbKnZV/pN0PUX1ZvVVfw7v8t22SDHYm09jHHbzQJdiMK2TJ
89RcKmE8d8D2Z9igInhdK2BEaGp4JYVQZdhchM58JcE+rvPcdsDhEhsA+z88UejWBGMZpJo1T8OCaK0OKPqKR7ZRt1kSlG78CDuHoldDu9HaKMm5ED/JxguC8EyIOLnnHTa/3kutMIEdK4ZOowlAEsgVmrKizMa7JvDOHhl5ycoaL8DD/rdhaL
quXX+8bRcgqXl385 root@centos-01
[root@centos-02 git]#
4.测试公钥是否设置成功,结果说明成功了只是git是不允许登录的
[root@centos-01 ~]# ssh git@192.168.133.88
fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.
Connection to 192.168.133.88 closed.
[root@centos-01 ~]#
5.创建一个git的仓库
[root@centos-02 git]# cd /data/
[root@centos-02 data]# mkdir /data/gitroot
[root@centos-02 data]# cd /data/gitroot/
[root@centos-02 gitroot]# git init --bare sample.git
初始化空的 Git 版本库于 /data/gitroot/sample.git/
[root@centos-02 gitroot]# ls
sample.git
[root@centos-02 gitroot]# chown -R git.git sample.git
[root@centos-02 gitroot]#
6.在远程上(01客户端)克隆服务器仓库
[root@centos-01 ~]# git clone git@192.168.133.88:/data/gitroot/sample.git
正克隆到 'sample'...
warning: 您似乎克隆了一个空版本库。
[root@centos-01 ~]# cd sample/
[root@centos-01 sample]# ls -la
总用量 4
drwxr-xr-x 3 root root 18 5月 9 06:53 .
dr-xr-x---. 21 root root 4096 5月 9 06:53 ..
drwxr-xr-x 7 root root 119 5月 9 06:53 .git
[root@centos-01 sample]# cp /e
epel-release-7-11.noarch.rpm etc/
[root@centos-01 sample]# cp /etc/init.d/mysqld .
[root@centos-01 sample]# git add .
[root@centos-01 sample]# git commit -m "add new file"
[master(根提交) e841397] add new file
1 file changed, 388 insertions(+)
create mode 100755 mysqld
[root@centos-01 sample]# git push origin master
Counting objects: 3, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 3.88 KiB | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@192.168.133.88:/data/gitroot/sample.git
* [new branch] master -> master
[root@centos-01 sample]#
7.测试git服务器
[root@centos-01 sample]# echo "lafldkflksdf" > 222.txt
[root@centos-01 sample]# git add 222.txt
[root@centos-01 sample]# git commit -m "add 222.txt"
[master 6c56668] add 222.txt
1 file changed, 1 insertion(+)
create mode 100644 222.txt
[root@centos-01 sample]# git push
warning: push.default 未设置,它的默认值将会在 Git 2.0 由 'matching'
修改为 'simple'。若要不再显示本信息并在其默认值改变后维持当前使用习惯,
进行如下设置:
git config --global push.default matching
若要不再显示本信息并从现在开始采用新的使用习惯,设置:
git config --global push.default simple
参见 'git help config' 并查找 'push.default' 以获取更多信息。
('simple' 模式由 Git 1.7.11 版本引入。如果您有时要使用老版本的 Git,
为保持兼容,请用 'current' 代替 'simple' 模式)
Counting objects: 4, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 279 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@192.168.133.88:/data/gitroot/sample.git
e841397..6c56668 master -> master
[root@centos-01 sample]# cd /tmp/
[root@centos-01 tmp]# git clone git@192.168.133.88:/data/gitroot/sample.git
正克隆到 'sample'...
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 6 (delta 0), reused 0 (delta 0)
接收对象中: 100% (6/6), 4.13 KiB | 0 bytes/s, done.
[root@centos-01 tmp]# ls sample/
222.txt mysqld
[root@centos-01 tmp]# cd sample/
[root@centos-01 sample]# vim 222.txt
[root@centos-01 sample]# cat 222.txt
lafldkflksdf
alfdldsflsdlf
[root@centos-01 sample]# git add 222.txt
[root@centos-01 sample]# git commit -m "ch 222.txt"
[master 6f7c268] ch 222.txt
1 file changed, 1 insertion(+)
[root@centos-01 sample]# git push
warning: push.default 未设置,它的默认值将会在 Git 2.0 由 'matching'
修改为 'simple'。若要不再显示本信息并在其默认值改变后维持当前使用习惯,
进行如下设置:
git config --global push.default matching
若要不再显示本信息并从现在开始采用新的使用习惯,设置:
git config --global push.default simple
参见 'git help config' 并查找 'push.default' 以获取更多信息。
('simple' 模式由 Git 1.7.11 版本引入。如果您有时要使用老版本的 Git,
为保持兼容,请用 'current' 代替 'simple' 模式)
Counting objects: 5, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 295 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@192.168.133.88:/data/gitroot/sample.git
6c56668..6f7c268 master -> master
[root@centos-01 sample]# cd /root/sample/
[root@centos-01 sample]# ls
222.txt mysqld
[root@centos-01 sample]# git pull
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
来自 192.168.133.88:/data/gitroot/sample
6c56668..6f7c268 master -> origin/master
更新 6c56668..6f7c268
Fast-forward
222.txt | 1 +
1 file changed, 1 insertion(+)
[root@centos-01 sample]# cat 222.txt
lafldkflksdf
alfdldsflsdlf
[root@centos-01 sample]#
安装gitlab
1.安装gitlab(失败,还是用官方的安装吧)
[root@centos-01 sample]# vim /etc/yum.repos.d/gitlab.repo
[root@centos-01 sample]# cat /etc/yum.repos.d/gitlab.repo
[gitlab-ce]
name=gitlab-ce
baseurl=http://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7
Repo_gpgcheck=0
Enabled=1
Gpgkey=https://packages.gitlab.com/gpg.key
[root@centos-01 sample]# yum install -y gitlab-ce
gitlab-ce-10.7.3-ce.0.el7.x86_64.rpm 的公钥尚未安装
失败的软件包是:gitlab-ce-10.7.3-ce.0.el7.x86_64
GPG 密钥配置为:https://packages.gitlab.com/gpg.key
[root@centos-01 sample]#
2.官方安装
[root@centos-01 ~]# sudo yum install -y curl policycoreutils-python openssh-server openssh-clients (安装和配置必要的依赖关系)
[root@centos-01 ~]# sudo systemctl enable sshd
[root@centos-01 ~]# sudo systemctl start sshd
[root@centos-01 ~]# sudo firewall-cmd --permanent --add-service=http
FirewallD is not running
[root@centos-01 ~]# sudo systemctl reload firewalld
Job for firewalld.service invalid.
[root@centos-01 ~]# sudo yum install postfix
已加载插件:fastestmirror, langpacks
https://repo.mongodb.org/yum/redhat/7/mongodb-org/3.6/x86_64/repodata/repomd.xml: [Errno 14] curl#35 - "TCP connection reset by peer"
正在尝试其它镜像。
Loading mirror speeds from cached hostfile
* base: mirrors.tuna.tsinghua.edu.cn
* epel: mirror.dmmlabs.jp
* extras: mirrors.tuna.tsinghua.edu.cn
* updates: mirrors.njupt.edu.cn
软件包 2:postfix-2.10.1-6.el7.x86_64 已安装并且是最新版本
无须任何处理
[root@centos-01 ~]# sudo systemctl enable postfix
[root@centos-01 ~]# sudo systemctl start postfix
[root@centos-01 ~]#
3.生成gitlab包仓库
[root@centos-01 ~]# curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
4.安装gitlab-ce并指定访问的ip为192.168.133.44(可以指定其他域名)
[root@centos-01 ~]# sudo EXTERNAL_URL="192.168.133.44" yum install -y gitlab-ce
5.配置配置文件
[root@centos-01 ~]# gitlab-ctl reconfigure
6.配置文件目录(目的是配置gitlab相关的服务启动)
[root@centos-01 ~]# cat /etc/gitlab/gitlab.rb |grep external_url
##! For more details on configuring external_url see:
external_url 'http://192.168.133.44'
# registry_external_url 'https://registry.gitlab.example.com'
# pages_external_url "http://pages.example.com/"
# gitlab_pages['artifacts_server_url'] = nil # Defaults to external_url + '/api/v4'
# mattermost_external_url 'http://mattermost.example.com'
[root@centos-01 ~]#
[root@centos-01 ~]# ps aux|grep gitlab
[root@centos-01 ~]# netstat -lntp
[root@centos-01 ~]#
[root@centos-01 ~]# /etc/init.d/nginx stop (关闭之前的nginx)
[root@centos-01 ~]# chkconfig nginx off
1.停止服务
[root@centos-01 ~]# gitlab-ctl stop
2.启动服务
[root@centos-01 ~]# gitlab-ctl start
3.ip进行访问
使用gitlab
1.配置gitlab域名访问,配置文件如下,修改server_name就行。
[root@centos-01 ~]# cat /var/opt/gitlab/nginx/conf/gitlab-http.conf |grep server
server unix:/var/opt/gitlab/gitlab-workhorse/socket;
server {
server_name 192.168.133.44;
server_tokens off; ## Don't show the nginx version number, a security best practice
[root@centos-01 ~]#
2.在gitlab上新建项目,首先建立一个group
3.创建项目
4.创建完项目后会有一个提醒,意思是还没有建立ssh key,这个key和我们之前做的gitlab一样需要添加key,然后就可以通信了。
5.点setting添加key
6.添加新用户
gitlab备份和恢复
1.执行命令
2.备份文件所在目录
3.恢复gitlab