赞
踩
git是著名分布式控制系统,没有所谓的“中央服务器”托管代码,每个PC都保存了一份完整的代码,各个PC如果做了修改,会进行相互推送修改的代码部分;服务器只需要部署git这个应用程序即可,而完成代码相互推送需要进行配置,通常来说有HTTP和ssh两种方式,下面就记录这两种方式
使用HTTP方式,交互过程数据不会进行加密的;
一般使用步骤
git init //git生成相关的配置环境
cd .git //切换到期环境目录
vim config //这个config就是需要配置的文件
git config user.name "username"
git config user.email "passwd"
配置好后,查看配置文件如下:
一般只需要配置user即可,这样以后git clone拉取文件就可;这里是针对局部配置,如果切到另外一个路径则需要重新配置;如果需要一次性搞定配置,在所有路径下都可以Git clone代码的话,则使用以下配置:
git config --gloabl user.name "username"
git config --gloabl user.email "passwd"
经过上诉配置后,会保存在你的~/.gitconfig里面的;每次进行git clone项目时会读取该配置文件使用其中user信息;
经常会有这种需求的,比如你个人平时的代码在github上的,而公司又专门又有一个gitlab, 这时候可以公司用全局配置,个人用局部配置,两者不冲突
ssh方式采用加密方式推送同步代码,其加密算法使用不对称加密算法,先生成一对公私钥,ssh客户端保存私钥,ssh服务端保存公钥;
ssh-keygen -t RSA -C "xx.email" //后面出现提示输入内容直接回车即可
此时,公私钥会保存在~/.ssh路径下,分别是id_rsa和id_rsa.pub
2. 将file.pub的内容拷贝到git服务端保存,以github为例,如下图:
ssh-keygen -t RSA -C "xx.email" -f file //名字不要和上一个相同,不然会覆盖上一个配置文件
此时,公私钥会保存在~/.ssh路径下,分别是file和file.pub
2.同上配置,拷贝公钥到服务器上即可
3.默认情况下,~/.ssh目录下没有配置文件,需要你自己创建一个config,配置内容如下:
## github
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa
# company github http://117.174.122.33/
Host 172.16.3.21
HostName 172.16.3.21
Port 80
PreferredAuthentications publickey
IdentityFile ~/.ssh/file
上面配置好后,当你使用git去clone项目时会跟进clone的地址自动进入相应的配置,从而去拉取项目
ssh -T -v git@你的服务器IP或域名
连接成功,则会有successful的提示;
博主这一步遇到了这个问题,测试发现返回这样的结果:
OpenSSH_7.5p1, LibreSSL 2.5.4 debug1: Reading configuration data /Users/sever1/.ssh/config debug1: /Users/sever1/.ssh/config line 9: Applying options for 172.16.3.21 debug1: Reading configuration data /etc/ssh/ssh_config debug1: /etc/ssh/ssh_config line 52: Applying options for * debug1: Connecting to 172.16.3.21 [172.16.3.21] port 80. debug1: Connection established. debug1: identity file /Users/sever1/.ssh/zywlw type 1 debug1: key_load_public: No such file or directory debug1: identity file /Users/sever1/.ssh/zywlw-cert type -1 debug1: Enabling compatibility mode for protocol 2.0 debug1: Local version string SSH-2.0-OpenSSH_7.5 debug1: ssh_exchange_identification: HTTP/1.1 400 Bad Request debug1: ssh_exchange_identification: Server: nginx debug1: ssh_exchange_identification: Date: Wed, 25 Jul 2018 21:51:06 GMT debug1: ssh_exchange_identification: Content-Type: text/html debug1: ssh_exchange_identification: Content-Length: 166 debug1: ssh_exchange_identification: Connection: close debug1: ssh_exchange_identification: debug1: ssh_exchange_identification: <html> debug1: ssh_exchange_identification: <head><title>400 Bad Request</title></head> debug1: ssh_exchange_identification: <body bgcolor="white"> debug1: ssh_exchange_identification: <center><h1>400 Bad Request</h1></center> debug1: ssh_exchange_identification: <hr><center>nginx</center> debug1: ssh_exchange_identification: </body> debug1: ssh_exchange_identification: </html> ssh_exchange_identification: Connection closed by remote host
看最后一步,这是被远端所关闭,有可能被服务器禁了,需要你去找后台人员确认解决
git checkout -b branch_name
git checkout -b local_branch origin/remote_branch
git fetch
git checkout 940ebaca9b8d10f2ca4a076b8b1a8c1dc3ae2dd2 //历史版本号
git push origin remote_branch //提交道远程分支
以上所有的操作都必须先要clone项目的mater后方可操作
git branch -a
git push origin --delete remote_branch
git branch -d local_branch
git checkout -b your_new_branch origin/old_branch
本地必须先创建好分支,不然会覆盖本地当前分支
git pull origin remote_branch
git clone -b remote_branch address
//对某个历史版本打上标签
git tag -a tag_name 版本commit数字 -m "标签说明"
//推送标签到远端
git push origin tag_name
//删除本地标签
git tag -d tag_name
//将本次删除推送到远端
git push origin :refs/tags/tag_name
git查看记录是用git log来查看,但是它只是查看本地分支最新的提交记录,无法查看远端仓卡分支最新的记录;如何查看就是用:
git log origin/远端分支名称
只需两个步骤:
git fetch --all
如果不加–all默认就会拉取当前分支的代码到本地
git reset --hard origin/远端分支名
查看当前本地分支关联的远端分支
git branch -vv
本地分支关联远端分支
git branch --set-upstream-to=<远程主机名>/<远程分支名> <本地分支名>
例如:
git branch --setupstream-to=origin/remote_ba local_ba
一般用git status就能看到,如下:
On branch Mode
Your branch is ahead of 'origin/Mode' by 2 commits.
(use "git push" to publish your local commits)
nothing to commit, working tree clean
在Mode分支上,你领先远端Mode分支2个commits,也就是说你本地有commit的代码,但是没提交;
或者用这个命令:
git log 本地分支 ^origin/远端分支
能详细列出每笔commit修改情况
soft和hard
git reset --soft或者--hard HEAD~1
soft就是放弃commit提交但是保留文件
hard就是放弃commit同时删除commit的修改内容,这样保证恢复的文件是干净的
1就是放弃上一次,2就是放弃2次
这里要注意,如果你本地代码库有修改,但不需要这些修改,只要求恢复到和远端代码库一样的干净代码库,那你就把你本地的代码git add在commit进去,这步不要提交,在使用上面的reset --hard去清除commit,最后你的代码就是干净的了,和远端一模一样
git push -u origin local_branch:remote_branch
push上去后就会创建远端分支remote_branch
查看某笔提交的修改记录,以下查看会比较详细,会详细列举每个文件内部的修改内容
git show commit-id
如果不需要看太详细,只需要查看哪些文件修改过,可以使用以下:
git show --name-only commit-id
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。