
git push代码会更新自己的代码原因:如果你拉去的代码所包含的commit中, 有对你当前变更的文件进行的修改, 他就会报这个错误。如果你本地从的更高没有提交,他是不会自动尝试merge的。
在服务器上创建一个git仓库 git init 在本地点卯克隆远程git仓库到本地 git clone 本地仓库里面写代码,添加、提交到本地仓库 git add ; git commit 推送到远程代码仓库 git push。
Git的功能特性:
1、从服务器上克隆完整的Git仓库(包括代码和版本信息)到单机上。
2、在自己的机器上根据不同的开发目的,创建分支,修改代码。
3、在单机上自己创建的分支上提交代码。
4、在单机上合并分支。
5、把服务器上最新版的代码fetch下来,然后跟自己的主分支合并。
废话不多说,直接来干的。这里介绍一套成熟的方案。
gitlab(代码管理)+jenkins(持续集成)+k8s(服务管理)
其中涉及到的技术细节:dockerindockermakefile
gitlab使用介绍
gitlab是一款类似github的开源代码管理软件,可在公司内网,直接搭建一套私有代码仓库,适合团队多人开发,具有完善的分支管理、角色管理、issue、里程碑等。是非常优秀的一款软件。
jeknis使用介绍
这是一款开源持续集成软件,说人话就是使用他可以自动化部署服务。其具有gitlab相关的插件,安装后可直接对接gitlab,当gitlab发生push或者merge代码事件,会通知jeknis去完成最新推送的代码的镜像构建和部署。
推荐上面说的两款技术和jeknis混合使用。
1dockerindocker技术。顾名思义就是docker里面运行docker,简单点直接用dockerfile在jeknis镜像的基础上安装docker客户端或者k8s客户端。这样我们在容器中就可以直接调用宿主机的docker命令或者k8s命令。这对我们使用jenkins执行部署脚本,通知k8s或者docker部署服务,非常方便。
2makefile之所以介绍这款他,是因为其具有一个绝佳的功能,可以检测文件内容是否发生变化,这样对于微服务架构,其配合jenkins,无需指定什么,就可以部署上发生文件变化的微服务。而不会影响到其他服务。
k8s使用介绍
这款当红炸子鸡,相信大家耳闻已久。其实现了对docker的管理和编排。配合上共享存储和其服务自动重启机制,可以让我们的服务无当机。
对于docker内部服务的暴露推荐ingress+service
docker镜像管理推荐harbor。
以上完整的自动化开发部署环境,有兴趣的可以自行学习相关内容,进行搭建测试。
1、本地公钥的获取,
cd ~/ssh
ls
使用指令ssh-keygen,生产公钥,第一个提示时输入文件(默认是id_rsa),第二个提示时输入的是密钥,
公钥放置在id_rsapub文件中。
2、按照code的提示,进行代码上传。
21 建立一个git文件件,比如git_csdn ,
22 git init,建仓 *** 作,
23 可以新建一个readmemd, touch READMEmd
24 git add添加所有文件,git add file,添加file,比如git add README
25 git commit -m "first commit"
26 git remote add origin git @ url 地址
27 git push -u origin master
3、git clone 地址
4、git remote 不带参数,列出已经存在的远程分支
$ git remote
origin
5、配置:
$ git config --global username "John Doe"
$ git config --global useremail johndoe@examplecom
出现的问题:Updates were rejected because the tip of your current branch is behind
有如下几种解决方法:
1使用强制push的方法:
$ git push -u origin master -f
这样会使远程修改丢失,一般是不可取的,尤其是多人协作开发的时候。
2push前先将远程repository修改pull下来
$ git pull origin master
$ git push -u origin master
3若不想merge远程和本地修改,可以先创建新的分支:
$ git branch [name]
然后push
$ git push -u origin [name]
分支管理:
1、创建分支: git branch new_branch
2、查看分支:git branch
3、删除分支:git branch -d new_branch
4、切换分支:git checkout new_branch
5、创建分支并切换分支: git checkout -b new_branch即可在本地新建分支,并使用该分支track远程分支
6、提交并推送分支:
git add
git commit -m "xxx"
git push -u origin new_branch
7、删除远程分支:git push origin --delete new_branch
8、合并分支: git merge new_branch
9、将本地更新上传到远程分支上:
例如本地新建或是更新了内容newfilec文件,
首先git add newfilec,
然后git commit -m "add new file",
紧接着git push 本地分支名 远程分支名即可将本地分支更新到远程分支。
10获取远程分支
git fetch 从远程获取其他用户push上来的新分支
git remote -v 即可查看远程所有的版本信息
1架设Git服务器我们以Ubuntu为例。首先,在git服务器上创建一个名为'git'的用户,并为其创建一个ssh目录。并将其权限设置为仅git用户有读写权限$sudoaddusergit$sugit$cd$mkdirssh$chmod700ssh接下来,把开发者的SSH公钥添加到这个用户的authorized_keys文件中。假设你通过电邮收到了几个公钥并存到了临时文件里。重复一下,公钥大致看起来是这个样子:$cat/tmp/id_rsajohnpubssh-rsaAAAAB3NzaC1yc2EAAAADAQABAAABAQCB007n/ww+ouN4gSLKssMxXnBOvf9LGt4LojG6rs6hPB09j9R/T17/x4lhJA0F3FR1rP6kYBRsWj2aThGw6HXLm9/5zytK6Ztg3RPKK+4kYjh6541NYsnEAZuXz0jTTyAUfrtU3Z5E003C4oxOj6H0rfIF1kKI9MAQLMdpGW1GYEIgS9EzSdfd8AcCIicTDWbqLAcU4UpkaX8KyGlLwsNuuGztobF8m72ALC/nLF6JLtPofwFBlgc+myivO7TCUSBdLQlgMVOFq1I2uPWQOkOWQAHukEOmfjy2jctxSDBQ220ymjaNsHT4kgtZg2AYYgPqdAv8JggJICUvax2T9va5gsg-keypair只要把它们逐个追加到authorized_keys文件尾部即可,同时将authorized_keys设置为仅git用户有读写权限。$cat/tmp/id_rsajohnpub>>~/ssh/authorized_keys$cat/tmp/id_rsajosiepub>>~/ssh/authorized_keys$cat/tmp/id_rsajessicapub>>~/ssh/authorized_keys$chmod600~/ssh/authorized_keys现在可以用--bare选项运行gitinit来建立一个裸仓库,这会初始化一个不包含工作目录的仓库。$cd/opt/git$mkdirprojectgit$cdprojectgit$git--bareinit这时,Join,Josie或者Jessica就可以把它加为远程仓库,推送一个分支,从而把第一个版本的项目文件上传到仓库里了。值得注意的是,每次添加一个新项目都需要通过shell登入主机并创建一个裸仓库目录。我们不妨以gitserver作为git用户及项目仓库所在的主机名。如果在网络内部运行该主机,并在DNS中设定gitserver指向该主机,那么以下这些命令都是可用的:#在John的电脑上$cdmyproject$gitinit$gitadd$gitcommit-m'initialcommit'$gitremoteaddorigingit@gitserver:/opt/git/projectgit$gitpushoriginmaster这样,其他人的克隆和推送也一样变得很简单:$gitclonegit@gitserver:/opt/git/projectgit$vimREADME$gitcommit-am'fixfortheREADMEfile'$gitpushoriginmaster用这个方法可以很快捷地为少数几个开发者架设一个可读写的Git服务。作为一个额外的防范措施,你可以用Git自带的git-shell工具限制git用户的活动范围。只要把它设为git用户登入的shell,那么该用户就无法使用普通的bash或者csh什么的shell程序。编辑/etc/passwd文件:$sudovim/etc/passwd在文件末尾,你应该能找到类似这样的行:git:x:1000:1000::/home/git:/bin/sh把bin/sh改为/usr/bin/git-shell(或者用whichgit-shell查看它的实际安装路径)。该行修改后的样子如下:git:x:1000:1000::/home/git:/usr/bin/git-shell现在git用户只能用SSH连接来推送和获取Git仓库,而不能直接使用主机shell。尝试普通SSH登录的话,会看到下面这样的拒绝信息:$sshgit@gitserverfatal:WhatdoyouthinkIamAshellConnectiontogitserverclosed这里提供的方法,组内所有成员对project都有读写权限,也就是说每个分支都可以push代码,如果需要更加细致的权限控制,请使用Gitosis或者Gitolite。2搭建Gitweb安装gitweb之后就可以通过网站访问我们的项目了。就像gitwebconf#pathtogitprojects(git)$projectroot="/opt/git";至此gitweb就可以使用了,现在可以通过config[core]repositoryformatversion=0filemode=truebare=true[hooks]mailinglist="example@gmailcom,example2@gmailcom"#收件人列表envelopesender=projectgit@examplecom#送件人地址emailprefix="[Projectcommit]"#邮件标题前缀showrev="gitshow-C%s;echo"#不只显示有变化的文件,同时也显示改变的内容为了使邮件显示的更清楚,还要修改一下工程目录当中的description文件,在description文件中,默认第一行是项目名称,所以要在第一行填入该项目的名称,这个在邮件中会有显示。$vim/opt/git/projectgit/descriptionProject_A欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)