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仓库地址]
例如:
branch@10.2.254.222:/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后的内容。