GIT 在服务器上布署 & 本地布署

GIT 在Linux & windows安装部署

1)            安装git一.Linux部署 git

[root@bjoss03 ~]# yum install git

2)           创建git用户,用来运行git服务

[root@bjoss03 ~]# adduser [git用户名]

[root@bjoss03 ~]# passwd [密码]

3) 初始化Git远程仓库:

先选定一个目录作为Git远程仓库,假定是:

/wrk/sysadmin/arolinez/web/ywtest,到这个目录下:

1)      #创建远程git仓库   

              gitinit

2)     #设置git参数允许远端push并执行自动更新

              git config receive.denyCurrentBranchignore

暂时可以不用设置,有特殊作用(#GIT服务器实现web代码自动部署:             

echo"unset GIT_DIR; cd ..; git reset --hard" > .git/hooks/post-update

#设置可执行文件           

chmoda+x .git/hooks/post-update)

3) 设置远程要提交的用户信息

gitconfig --global user.email  "你的邮箱"

gitconfig --global user.name  "你的名子"

4) 初始化远程git仓库(因为git init 没有默认创建master分支,下面步骤就是创建master分支)

1.创建一个空目录:mkdir [文件名称]

       2.添加到git仓库中: git add [文件名]

       3.提交git仓库: git commit –m‘备注’

       4.推送到git仓库: git push

5.查看仓库是否有推送内容: git log

6.查看具体内容 : git diff [git log显示出来的commit 后面的字符串]

至此,远程git仓库已经创建完成。

4)创建用户后,将用户加入写入权限

       4.1)将用户git加入root组: chown -Rroot:git [git 仓库]

       4.2) 改变git仓库文件权限:chmod -R 775 [git 仓库]

5)补充:

1. 创建git仓库有两种方法:git init  和 git init –bare

使用命令"gitinit --bare"(bare汉语意思是:裸,裸的)初始化的版本库(暂且称为bare repository)只会生成一类文件:用于记录版本库历史记录的.git目录下面的文件;而不会包含实际项目源文件的拷贝;所以该版本库不能称为工作目录(working tree);如果你进入版本目录,就会发现只有.git目录下的文件,而没有其它文件;就是说,这个版本库里面的文件都是.git目录下面的文件,把原本在.git目录里面的文件放在版本库的根目录下面;换句话说,不使用--bare选项时,就会生成.git目录以及其下的版本历史记录文件,这些版本历史记录文件就存放在.git目录下;而使用--bare选项时,不再生成.git目录,而是只生成.git目录下面的版本历史记录文件,这些版本历史记录文件也不再存放在.git目录下面,而是直接存放在版本库的根目录下面

若是需要看到远程的文件就需要用gitinit,若不想要看到远程的文件,就用git init –bare.看需求使用那种初始化仓库

2.使用shell脚本自动创建git仓库:

       #!/bin/sh

 

name=$1

 

if [[ -z $name ]]; then

    echo "Usage: $0 {name}"

    exit 1

fi

 

git init $name

cd $name

git config receive.denyCurrentBranch ignore

#GIT服务器实现web代码自动部署:  

echo "unset GIT_DIR; cd ..; git reset --hard" > .git/hooks/post-update

#设置可执行文件

chmod a+x .git/hooks/post-update

初始化配置好后,在执行第4步骤初始化远程git仓库

完成上面的步骤,我们在服务器上面就新建了一个裸的git仓库。

 

二.克隆服务器上的git仓库

     1. 使用git命令:

          1)  克隆远程代码

                  git clone [git用户名]@[git仓库地址]

例如:

[email protected]:/wrk/sysadmin/arolinez/web/ywtest/ipinfo-online

              本地执行完该命令会让你输入密码,就是这个用户的密码

                     ,然后就会发现已经克隆到本地了。

配置本地要提交的用户信息:

gitconfig --global user.email  "你的邮箱"

gitconfig --global user.name  "你的名子"

2) 查看文件改动状态

     git status

3) 提交更新

拉取更新:git fetch

       git add [文件名称]

       git commit –m “[修改备注]” (虽然备注不是必须的吗,但是建议备注要有,方便以后查看和版本回退)

gitpush <本地分支名>:<远程分支名>  

 提交远程

如果当前分支只有一个追踪分支,那么都可以省略。

      gitpush

若出现下面错误:

则运行这个命令就行:git config --global push.default simple

4)撤销修改

       git checkout – [文件名称]

命令git checkout –[文件名称] 意思就是,把要修改的文件在工作区的修改全部撤销,这里有两种情况:

一种是文件自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

一种是文件已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

总之,就是让这个文件回到最近一次git commit或git add时的状态。

gitcheckout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

       5) 查看提交log

              gitlog

       6) 版本回退

              1. 回退到上个版本

                     git reset --hard HEAD^

Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交3628164...882e1e0(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。

总结:

HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hardcommit_id。

穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。

要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本

       7) 解决冲突

              Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,我们修改如下后保存:

       在调用3)步骤,提交冲突。

             

 具体git命令如何使用请参考   

http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/

2. 使用git GUI工具:

      因为本地环境是windows环境,下面就是windows系统的部署:

      1)本地部署git

              下载连接:https://git-scm.com/ 

       2) 下载git GUI工具 -> TortoiseGit

                     下载连接:http://rj.baidu.com/soft/detail/19969.html?ald

3) 设置tortoiseGit 配置:

3.1) 设置本地git用户名和邮箱:

安装后在桌面右键找到tortoiseGit->Settings->Git出现如下界面:

设置好name&Email

3.2)     设置ssh

  到git安装目录下,如下图所示找到ssh路径,设置如下

3.3)     克隆代码

右键找到git clone, 设置好clone的地址和存到本地的位置后,点击ok就可以了。

3.4)     若要更改项目push的地址:

3.5)Pull 拉取代码

到项目下,右键找到git Synchronization 点击pull,拉取代码

3.6)      提交到本地仓库commit

3.7)     推送到远程push

 然后别人在自己电脑pull拉取的时候,就会把你提交上去的代码拉取下来

三.SSH 免密提交

经过上面的提交,会发现每次提交更新都是需要输入密码的,为了节约开发时间,提高工作效率,故配置ssh密钥登陆

1) Linux生成私钥

cd.ssh

ssh-keygen-t rsa

      cat~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

      chmod600 ~/.ssh/authorized_keys

2)收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。

3) 在用户主目录下(开始->运行->输入 "." 或 "%userprofile%")创建目录".ssh", 将生成的私钥文件( id_rsa)拷贝到".ssh"目录中。 如果目前下已经有同名文件,请手工修改和合并。

然后就可以发现pull\commit\push都不会需要密码了

四.创建git分支

为了项目稳定及安全,将所有开发人员写的代码放到master上面,经过测试人员测试无误后推送到rel分支上(即正式线上),

1).创建分支 git branch [分支名称]

2).切换分支 git checkout  [分支名称]

可以将两步合成一步:

创建+切换分支:git checkout -b [分支名称]

3)合并分支marage:     git [rel分支名称] --no-ff  [master 分支名称]

按照这个规则推送分支上的改动。

总结: 布署git环境的时候遇到一些问题:

1.       新建的git用户没有权限push。

原因:是因为新建用户没有对文件的写入权限,

解决办法:在服务器上修改用户对文件的写入权限。

2.     sshroot密钥有用,但是新建用户 配置无效果

原因:是因为新建用户的生成密钥有问题。

解决办法:重写生成密钥。安装上面的步骤,将密钥替换。

3.     若使用git init 初始化仓库则本地不能更新.

原因:因为git init 不创建master分支

解决办法:使用git add,git commit 提交文件就会有分支了

4.     提交后看不到文件

解决办法:     远程端必须运行命令:git reset --hard才能看到push后的内容。


猜你喜欢

转载自blog.csdn.net/ywcsd/article/details/60871491