当前位置: 首页 > news >正文

免费制作主图的网站网站建设实验总结百科

免费制作主图的网站,网站建设实验总结百科,wordpress 信息流,制作微信网站目录 一、前言 二、centos安装Git 三、Git基本操作 (1) 创建Git本地仓库 (2) 配置Git (3) 认识工作区#xff0c;暂存区#xff0c;版本库 四、添加文件 五、查看.git文件 六、修改文件 七、版本回退 八、撤销修改 (1) 场景一 对于还没有add的代码 (2) 场景二 已…目录 一、前言 二、centos安装Git 三、Git基本操作 (1) 创建Git本地仓库 (2) 配置Git (3) 认识工作区暂存区版本库 四、添加文件 五、查看.git文件 六、修改文件 七、版本回退 八、撤销修改 (1) 场景一 对于还没有add的代码 (2) 场景二 已经 add 但没有 commit (3) 场景三 已经 add 并且也 commit 了 九、删除文件 十、分支管理 (1) 创建分支 (2) 切换分支 (3) 合并分支 (4) 删除分支 (5) 合并冲突 十一、分支管理策略 (1) master分支 (2) bug分支 (3) 删除临时分支 十二、远程操作 (1) 新建远程仓库 (2) 克隆远程仓库 a. 通过HTTPS克隆 b. 通过SSH克隆 (3) 向远程仓库推送 (4) 拉取远程仓库 十三、配置git (1) .gitignore忽略特殊文件 (2) 给命令配置别名 十四、标签管理 (1) 理解标签 (2) 创建标签 (3) 操作标签 十五、多人协作 (1) 多人协作 (2) 将内容合并到master (3) 远程分⽀删除后本地git branch -a依然能看到的解决办法 十六、企业级开发模型 (1) 系统开发环境 (2) Git分支设计规范 十七、结尾 一、前言 大二上学期学校开了数据库的课程让做课程设计数据库代码文档等都搞好了让老师看的时候文档写的不好让修改改了之后继续让老师看来来回回弄了三四次最后老师说你把第一次的文档发给我吧。随着版本的不断增多各自版本的内容是什么我们还知道吗每个版本有各⾃的内容但最终会只有⼀份报告需要被我们使⽤。文档是这样的我们写的代码也是这样的。 如何解决这个问题---- 版本控制器 Git 文件可能会有很多版本通过版本控制器可以了解一个文件的历史以及它发展过程中的系统。说白了就是可以记录工程中的每一次改动和版本迭代的一个管理系统也可以多人协同作业。 目前最主流的版本控制器是Git。Git可以控制电脑上的所有格式的文件例如docexecldwg等。当然对于开发人员来说Git最重要的是可以帮助我们管理软件开发项目中的源代码文件。 所有的版本控制系统其实只能跟踪文本文件的改动比如TXT文件网页所有的程序代码等等。版本控制器可以告诉你每次的改动比如某一行添加了什么某一行删除了什么。但是图片视频这些二进制文件虽然也可以被版本控制器管理但不能知道文件发生了什么变化比如图片从120变成了100图片哪里改变了版本控制器是不知道的。 二、centos安装Git 输入git之后如果出现gitcommand not found就是没有安装git。 sudo yum -y install git可以安装git。 通过git --version可以查看安装git的版本。 三、Git基本操作 (1) 创建Git本地仓库 仓库是进行版本控制的一个文件目录。我们要想对文件进行版本控制就必须先创建一个仓库出来。 mkdir gitcode 创建仓库 git init创建之后cd .git就可以进入到创建的本地仓库中了。.git目录是Git来跟踪管理仓库的不要手动修改这个目录里面的文件不然改乱了就把Git仓库给破坏了。 (2) 配置Git 安装Git后首要做的事情是设置你的用户名称和e-mail地址这是非常重要的。 配置命令为 git config user.name name git config user.email xxxxxqq.com 通过git config -l可以查看是否配置成功 删除配置命令 git config --unset user.name git config --unset user.email git config --global user.name name git config --global user.email email git config -luser.namenameuser.emailemailcore.repositoryformatversion0core.filemodetruecore.barefalsecore.logallrefupdatestrue这个--global是一个可选项如果使用了这个选项标识这台机器上所有的git仓库都会使用这个配置。如果你希望在不同仓库中使用不同的name或e-mail可以不要--global选项但要注意执行命令的时候必须要在仓库里。 删除对应的配置命令为 git config [--global] --unset user.name git config [--global] --unset user.email (3) 认识工作区暂存区版本库 在仓库中创建一个ReadMe文件Git能否管理ReadMe文件答案是不行的。 ⼯作区是在电脑上你要写代码或⽂件的⽬录。 暂存区英⽂叫stage或 index。⼀般存放在 .git ⽬录下的index ⽂件.git/index中我们把暂存区有时也叫作索引index。 版本库⼜名仓库英⽂名repository 。⼯作区有⼀个隐藏⽬录 .git 它不算⼯作区是Git的版本库。这个版本库⾥⾯的所有⽂件都可以被Git管理起来每个⽂件的修改、删除Git都能跟踪以便任何时刻都可以追踪历史或者在将来某个时刻可以“还原” 。 在工作区中进行新增修改删除等之类的操作后修改的工作区内容会写入对象库的一个新的git对象中。将对象管理起来就可以完成对版本的管理。 所有的对象都会存在这个objects中。 四、添加文件 使用git add 文件名可以将文件添加到暂存区也可以使用git add . 这个命令是将当前目录下面的所有文件改动到暂存区当中。 在使用git commit 命令将暂存区内容添加到本地仓库中 提交暂存区全部内容到本地仓库中: git commit -m message 提交暂存区的指定⽂件到仓库区 git commit [file1] [file2] ... -m message 这个 message是要提交的细节也可以说是这次提交版本的一个备注。 使⽤ git log 命令来查看下历史提交记录 该命令显⽰从最近到最远的提交⽇志并且可以看到我们commit时的⽇志消息。如果嫌输出信息太多看得眼花缭乱的可以试试加上 --prettyoneline 参数 这一大串数字是每次提交的commit id(版本号)这个数字是经过加密算法SHA1计算出来的一个非常大的数字用十六进制表示。 五、查看.git文件 .git/ ├── branches ├── COMMIT_EDITMSG ├── config ├── description ├── HEAD ├── hooks │?? ├── applypatch-msg.sample │?? ├── commit-msg.sample │?? ├── post-update.sample │?? ├── pre-applypatch.sample │?? ├── pre-commit.sample │?? ├── prepare-commit-msg.sample │?? ├── pre-push.sample │?? ├── pre-rebase.sample │?? └── update.sample ├── index ├── info │?? └── exclude ├── logs │?? ├── HEAD │?? └── refs │?? └── heads │?? └── master ├── objects │?? ├── 1e │?? │?? └── d7c1605990be5792ee92e05286efb364b1a79f │?? ├── 42 │?? │?? └── 8b97b82b6c59cad7488b24e6b618ebbcd819bc │?? ├── 6f │?? │?? └── 014900d134c7702d875fe8626fcde0ec46ce83 │?? ├── info │?? └── pack └── refs├── heads│?? └── master└── tagsindex 就是我们的暂存区add后的内容都是添加到这⾥的。 HEAD 就是我们的默认指向master分⽀的指针 objects为Git的对象库⾥⾯包含了创建的各种版本库对象及内容。当执⾏git add命令时暂存区的⽬录树被更新同时⼯作区修改或新增的⽂件内容被写⼊到对象库中的⼀个新的对象中就位于.git/objects⽬录下. 六、修改文件 Git⽐其他版本控制系统设计得优秀因为Git跟踪并管理的是修改⽽⾮⽂件。 什么是修改⽐如你新增了⼀⾏这就是⼀个修改删除了⼀⾏也是⼀个修改更改了某些字符 也是⼀个修改删了⼀些⼜加了⼀些也是⼀个修改甚⾄创建⼀个新⽂件也算⼀个修改。让我们将 ReadMe ⽂件进⾏⼀次修改。 我对ReadMe的文件进行了修改此时仓库中的ReadMe和我们工作区的ReadMe是不同的如何查看当前仓库的状态呢 git status 命令用于查看你上次提交之后是否对文件进行再次修改。 上⾯的结果告诉我们ReadMe 被修改过了但还没有完成添加与提交 。 我们只知道文件被修改了并不知道什么地方被修改了。 git diff [file] 命令⽤来显⽰暂存区和⼯作区⽂件的差异显⽰的格式正是Unix通⽤的diff格式。也可以使⽤ git diff HEAD -- [file] 命令来查看版本库和⼯作区⽂件的区别。知道了对ReadMe做了什么修改后再把它提交到本地仓库就放⼼多了 。 add之后就没看到no changes added to commit的消息了接下来继续commit即可。 七、版本回退 前面说过Git能够管理文件的历史版本这也是版本控制器的重要能力之一。如果哪天工作出现了问题可以先回退到上一个版本重新开始这个时候就需要版本回退的功能了。 执行git reset 命令用于回退版本可以指定退回某一次提交的版本。当然这个回退只是将版本库中的内容进行回退工作区或暂存区是否进行回退需要有命令参数来决定。 git reset 命令语法格式为 git reset [--soft | --mixed | --hard] [HEAD] --mixed 为默认选项使⽤时可以不⽤带该参数。该参数将暂存区的内容退回为指定提交版本内 容⼯作区⽂件保持不变。 --soft 参数对于⼯作区和暂存区的内容都不变只是将版本库回退到某个指定版本。 --hard 参数将暂存区与⼯作区都退回到指定版本。切记⼯作区有未提交的代码时不要⽤这个命令因为⼯作区会回滚你没有提交的代码就再也找不回了所以使⽤该参数前⼀定要慎重 八、撤销修改 (1) 场景一 对于还没有add的代码 在代码git add之后又新添加了几行代码发现代码出现问题需要回退到git add的时候可以使用 git checkout -- filename来撤销 [sxkVM-4-13-centos gitcode]$ cat ReadMe HELLO WORLD! [sxkVM-4-13-centos gitcode]$ vim ReadMe [sxkVM-4-13-centos gitcode]$ cat ReadMe HELLO WORLD! HELLO WORLD! HELLO WORLD! [sxkVM-4-13-centos gitcode]$ git checkout -- ReadMe [sxkVM-4-13-centos gitcode]$ cat ReadMe HELLO WORLD! [sxkVM-4-13-centos gitcode]$ (2) 场景二 已经 add 但没有 commit 已经 add 但没有 commit 需要回退版本可以使用git reset --mixed HEAD将暂存区回退在使用场景一中的 git checkout -- filename将工作区中的版本回退。 [sxkVM-4-13-centos gitcode]$ git reset HEAD ReadMe [sxkVM-4-13-centos gitcode]$ git status # On branch master nothing to commit, working directory clean [sxkVM-4-13-centos gitcode]$ cat ReadMe HELLO WORLD! [sxkVM-4-13-centos gitcode]$ git checkout -- ReadMe [sxkVM-4-13-centos gitcode]$ cat ReadMe HELLO WORLD! (3) 场景三 已经 add 并且也 commit 了 要担⼼我们可以 git reset --hard HEAD^ 回退到上⼀个版本不过这是有条件的就是你还没有把⾃⼰的本地版本库推送到远程。还记得Git是分布式版本控制系统吗我们后⾯会讲到远程版本库⼀旦推送到远程版本库就真的惨了…… [sxkVM-4-13-centos gitcode]$ vim ReadMe [sxkVM-4-13-centos gitcode]$ git add ReadMe [sxkVM-4-13-centos gitcode]$ git commit -m modify [master f5a061b] modify1 file changed, 1 insertion() [sxkVM-4-13-centos gitcode]$ git reset --hard HEAD^ HEAD is now at 1ed7c16 add first file [sxkVM-4-13-centos gitcode]$ git status # On branch master nothing to commit, working directory clean [sxkVM-4-13-centos gitcode]$ cat ReadMe HELLO WORLD! [sxkVM-4-13-centos gitcode]$ 九、删除文件 使用rm 命令只是把文件从工作区中删除了但是暂存区和版本库中并没有改变可以使用git rm filename和git commit -m message命令将文件从暂存区和版本库中也删除 [sxkVM-4-13-centos gitcode]$ touch test [sxkVM-4-13-centos gitcode]$ git add test [sxkVM-4-13-centos gitcode]$ git commit -m del test [master e045872] del test1 file changed, 0 insertions(), 0 deletions(-)create mode 100644 test [sxkVM-4-13-centos gitcode]$ git rm test rm test [sxkVM-4-13-centos gitcode]$ ll total 4 -rw-rw-r-- 1 sxk sxk 13 Mar 4 20:38 ReadMe [sxkVM-4-13-centos gitcode]$ git status # On branch master # Changes to be committed: # (use git reset HEAD file... to unstage) # # deleted: test # [sxkVM-4-13-centos gitcode]$ git commit -m delete test [master 00bb8a2] delete test1 file changed, 0 insertions(), 0 deletions(-)delete mode 100644 test [sxkVM-4-13-centos gitcode]$ git status # On branch master nothing to commit, working directory clean [sxkVM-4-13-centos gitcode]$ 十、分支管理 在版本回退⾥你已经知道每次提交Git都把它们串成⼀条时间线这条时间线就可以理解为是⼀个分⽀。截⽌到⽬前只有⼀条时间线在Git⾥这个分⽀叫主分⽀即master分⽀。 再来理解⼀下HEADHEAD 严格来说不是指向提交⽽是指向mastermaster才是指向提交的所以HEAD 指向的就是当前分⽀。 每次提交master分⽀都会向前移动⼀步这样随着你不断提交master分⽀的线也越来越⻓,⽽ HEAD只要⼀直指向master分⽀即可指向当前分⽀ (1) 创建分支 通过 git branch可以查看本地所有分支 [sxkVM-4-13-centos gitcode]$ git branch * master 通过 git branch CreateName可以创建新的分支 [sxkVM-4-13-centos gitcode]$ git branchCreateName * master (2) 切换分支 如何切换到新建的分支下进行开发呢 使用 git checkout CreateName可以完成切换 [sxkVM-4-13-centos gitcode]$ git checkout CreateName Switched to branch CreateName // 在不同分支中对ReadMe进行修改。 [sxkVM-4-13-centos gitcode]$ cat ReadMe HELLO WORLD! [sxkVM-4-13-centos gitcode]$ vim ReadMe [sxkVM-4-13-centos gitcode]$ cat ReadMe HELLO WORLD! HELLO WORLD! HELLO WORLD! HELLO WORLD! HELLO WORLD! ------------------------------------------------------------------------------------ // 将文件提交到本地仓库 [sxkVM-4-13-centos gitcode]$ git add ReadMe [sxkVM-4-13-centos gitcode]$ git commit -m md ReadMe [CreateName fa00f51] md ReadMe1 file changed, 4 insertions() ------------------------------------------------------------------------------------ // 查看文件状态并将分支切换到master [sxkVM-4-13-centos gitcode]$ git status # On branch CreateName nothing to commit, working directory clean [sxkVM-4-13-centos gitcode]$ git branch * CreateNamemaster [sxkVM-4-13-centos gitcode]$ git checkout master Switched to branch master ------------------------------------------------------------------------------------ // 文件在master分支下的内容 [sxkVM-4-13-centos gitcode]$ git branchCreateName * master [sxkVM-4-13-centos gitcode]$ cat ReadMe HELLO WORLD! ------------------------------------------------------------------------------------ // 文件在CreateName分支下的内容 [sxkVM-4-13-centos gitcode]$ git checkout CreateName Switched to branch CreateName [sxkVM-4-13-centos gitcode]$ cat ReadMe HELLO WORLD! HELLO WORLD! HELLO WORLD! HELLO WORLD! HELLO WORLD! 为什么会出现这个现象呢我们来看看CreateName分⽀和master分⽀指向发现两者指向的提交是不⼀样的 。 [sxkVM-4-13-centos gitcode]$ cat .git/refs/heads/CreateName fa00f518c0c2baffdd74cde515761de343dcff3d [sxkVM-4-13-centos gitcode]$ cat .git/refs/heads/master 00bb8a2258f62a5afd79c77cf25549fb7a2fa6aa [sxkVM-4-13-centos gitcode]$ (3) 合并分支 为了在master主分⽀上能看到新的提交就需要将 CreateName 分⽀合并到 master 分⽀ 。 将分支切换到master分支并执行 git merge CreateName就可以将分支合并到master中然后在查看master中ReadMe的内容可以发现内容已经和CreateName分支中的ReadMe内容一样。 [sxkVM-4-13-centos gitcode]$ git checkout master Switched to branch master [sxkVM-4-13-centos gitcode]$ git merge CreateName Updating 00bb8a2..fa00f51 Fast-forwardReadMe | 4 1 file changed, 4 insertions() [sxkVM-4-13-centos gitcode]$ cat ReadMe HELLO WORLD! HELLO WORLD! HELLO WORLD! HELLO WORLD! HELLO WORLD! Fast-forward代表“快进模式”也就是直接把master指向CreateName的当前提交所以合并速度⾮常快。当然也不是每次合并都能Fast-forward。 (4) 删除分支 合并完成后,CreateName分⽀对于我们来说就没⽤了那么CreateName分⽀就可以被删除掉注意如果当前正处于某分⽀下就不能删除当前分⽀。 通过 git branch -d CreateName来删除分支 [sxkVM-4-13-centos gitcode]$ git checkout CreateName Switched to branch CreateName [sxkVM-4-13-centos gitcode]$ git branch -d CreateName error: Cannot delete the branch CreateName which you are currently on. [sxkVM-4-13-centos gitcode]$ git checkout master Switched to branch master [sxkVM-4-13-centos gitcode]$ git branch -d CreateName Deleted branch CreateName (was fa00f51). [sxkVM-4-13-centos gitcode]$ (5) 合并冲突 在实际合并当中可能会遇到代码冲突的问题。 # 1.创建新的分支dev1并切换到分支dev1中把ReadMe文件进行修改然后commit到本地仓库 [sxkVM-4-13-centos gitcode]$ git branch dev1 [sxkVM-4-13-centos gitcode]$ git checkout dev1 Switched to branch dev1 [sxkVM-4-13-centos gitcode]$ vim ReadMe [sxkVM-4-13-centos gitcode]$ cat ReadMe HELLO WORLD! HELLO WORLD! HELLO WORLD! HELLO WORLD! HELLO WORLD! dev1 modify [sxkVM-4-13-centos gitcode]$ git add . [sxkVM-4-13-centos gitcode]$ git status # On branch dev1 # Changes to be committed: # (use git reset HEAD file... to unstage) # # modified: ReadMe # [sxkVM-4-13-centos gitcode]$ git commit -m modify ReadMe: dev1 [dev1 b472615] modify ReadMe: dev11 file changed, 1 insertion()# 2. 切换到分支master中修改ReadMe的内容并commit到本地仓库中[sxkVM-4-13-centos gitcode]$ git checkout master Switched to branch master [sxkVM-4-13-centos gitcode]$ cat ReadMe HELLO WORLD! HELLO WORLD! HELLO WORLD! HELLO WORLD! HELLO WORLD! [sxkVM-4-13-centos gitcode]$ vim ReadMe [sxkVM-4-13-centos gitcode]$ cat ReadMe HELLO WORLD! HELLO WORLD! HELLO WORLD! HELLO WORLD! HELLO WORLD! master modify [sxkVM-4-13-centos gitcode]$ git add . [sxkVM-4-13-centos gitcode]$ git commit -m modify ReadMe: master [master 05bf5ab] modify ReadMe: master1 file changed, 1 insertion() [sxkVM-4-13-centos gitcode]$ git branchdev1 * master# 3. 合并dev1分支到master中发现会出现冲突问题并且ReadMe文件中的内容也会出现一些其他内容[sxkVM-4-13-centos gitcode]$ git merge dev1 Auto-merging ReadMe CONFLICT (content): Merge conflict in ReadMe Automatic merge failed; fix conflicts and then commit the result. [sxkVM-4-13-centos gitcode]$ cat ReadMe HELLO WORLD! HELLO WORLD! HELLO WORLD! HELLO WORLD! HELLO WORLD!HEAD master modifydev1 modifydev1 [sxkVM-4-13-centos gitcode]$ 此时我们必须要⼿动调整冲突代码并需要再次提交修正后的结果再次提交很重要切勿忘 记 [sxkVM-4-13-centos gitcode]$ vim ReadMe [sxkVM-4-13-centos gitcode]$ cat ReadMe HELLO WORLD! HELLO WORLD! HELLO WORLD! HELLO WORLD! HELLO WORLD! master modify [sxkVM-4-13-centos gitcode]$ git add . [sxkVM-4-13-centos gitcode]$ git commit -m merge master [master 17985b9] merge master [sxkVM-4-13-centos gitcode]$ cat ReadMe HELLO WORLD! HELLO WORLD! HELLO WORLD! HELLO WORLD! HELLO WORLD! master modify [sxkVM-4-13-centos gitcode]$ 最后不要忘记dev1分⽀使⽤完毕后就可以删除了 十一、分支管理策略 在这种 Fast forward 模式下删除分⽀后查看分⽀历史时会丢掉分⽀信息看不出来最新提交到底是merge进来的还是正常提交的 。 Git ⽀持我们强制禁⽤ Fast forward 模式那么就会在 merge 时⽣成⼀个新的 commit 这样从分⽀历史上就可以看出分⽀信息。下⾯我们实战⼀下 --no-ff ⽅式的 git merge 。⾸先创建新的分⽀ dev2 并切换⾄新的分⽀。所以在合并分⽀时加上 --no-ff 参数就可以⽤普通模式合并合并后的历史有分⽀能看出来曾经做过合并⽽ fast forward 合并就看不出来曾经做过合并。 创建一个新的分支然后修改ReadMe中的内容addcommit之后切换分支到master合并分支的时候使用 git merge --no-ff -m merge dev dev命令 -m 是用来记录信息的。 [sxkVM-4-13-centos gitcode]$ git merge --no-ff -m merge dev dev Already up-to-date. [sxkVM-4-13-centos gitcode]$ cat ReadMe HELLO WORLD! HELLO WORLD! HELLO WORLD! HELLO WORLD! HELLO WORLD! master modify 我是dev [sxkVM-4-13-centos gitcode]$ git log --graph --abbrev-commit * commit cd08c07 |\ Merge: 17985b9 16286a2 | | Author: user email | | Date: Tue Mar 5 19:29:50 2024 0800 | | | | A | | A | | Merge branch dev(1) master分支 在实际开发中master分支应该是非常稳定的也就是仅仅用来发布新版本平时不能在上面干活干活都是在dev分支上dev分支是不稳定的到某个时候比如1.0版本发布时再把dev分支合并到master上在master分支发布1.0版本 你和你的同学在做项目的时候每个人都有自己的分支时不时的往dev分支上合并就可以了。 (2) bug分支 假如我们现在正在dev2分⽀上进⾏开发开发到⼀半突然发现 master 分⽀上⾯有bug需要解决。在Git中每个bug都可以通过⼀个新的临时分⽀来修复修复后合并分⽀然后将临时分⽀ 删除。可现在dev2的代码在⼯作区中开发了⼀半还⽆法提交怎么办 git 提供了 git stash命令可以将当前工作区信息进行存藏被存藏的内容可以恢复出来。 [sxkVM-4-13-centos gitcode]$ git checkout -b dev3 Switched to a new branch dev3 [sxkVM-4-13-centos gitcode]$ vim ReadMe [sxkVM-4-13-centos gitcode]$ git stash Saved working directory and index state WIP on dev3: cd08c07 A A Merge branch dev HEAD is now at cd08c07 A 现在就可以区修bug了 [sxkVM-4-13-centos gitcode]$ git checkout -b fix_bug Switched to a new branch fix_bug [sxkVM-4-13-centos gitcode]$ git checkout master Switched to branch master [sxkVM-4-13-centos gitcode]$ git merge -m fix_bug Already up-to-date. [sxkVM-4-13-centos gitcode]$ git branch -d fix_bug Deleted branch fix_bug (was cd08c07). 在bug修复完成之后切换到master分支完成合并将bug分支删除。 切回dev3分支通过 git stash list可以看到刚才存藏的工作现场。 [sxkVM-4-13-centos gitcode]$ git stash list stash{0}: WIP on dev3: cd08c07 A A Merge branch dev 使用 git stash pop命令可以在恢复工作区的同时把stash给删除了。 [sxkVM-4-13-centos gitcode]$ git checkout dev3 Switched to branch dev3 [sxkVM-4-13-centos gitcode]$ git stash list stash{0}: WIP on dev3: cd08c07 A A Merge branch dev [sxkVM-4-13-centos gitcode]$ git stash pop # On branch dev3 # Changes not staged for commit: # (use git add file... to update what will be committed) # (use git checkout -- file... to discard changes in working directory) # # modified: ReadMe # no changes added to commit (use git add and/or git commit -a) Dropped refs/stash{0} (a13b34d28bdb8d5374b115c2f1dc817ac040fc9b) [sxkVM-4-13-centos gitcode]$ 再次查看的时候就没有现场可以恢复了。 [sxkVM-4-13-centos gitcode]$ git stash list [sxkVM-4-13-centos gitcode]$ 另外恢复现场也可以采⽤ git stash apply 恢复但是恢复后stash内容并不删除你需要⽤ git stash drop 来删除你可以多次stash恢复的时候先⽤ git stash list 查看然后恢复指定的stash⽤命令git stash apply stash{0} 注意一个细节我们让dev3进行的存藏然后去修复master的bug在解决bug之后将bug分支和master分支进行了合并但是dev3中的master内容并不是解决完bug之后的master内容在dev3中是看不到修复bug的相关代码的。 我们的最终⽬的是要让 master 合并 dev2 分⽀的那么正常情况下我们切回 master 分⽀直接合并即可但这样其实是有⼀定⻛险的。是因为在合并分⽀时可能会有冲突⽽代码冲突需要我们⼿动解决在 master 上解决。我们⽆法保证对于冲突问题可以正确地⼀次性解决掉因为在实际的项⽬中代码冲突不只⼀两⾏那么简单有可能⼏⼗上百⾏甚⾄更多解决的过程中难免⼿误出错导致错误的代码被合并到 master 上。此时的状态为 解决这个问题的⼀个好的建议就是最好在⾃⼰的分⽀上合并下 master 再让 master 去合并dev 这样做的⽬的是有冲突可以在本地分⽀解决并进⾏测试⽽不影响 master 。此时的状态为   (3) 删除临时分支 在开发的过程中会有新功能要添加进来。添加一个新功能的时候会先新建一个分支在这个分支上面开发完成后在合并最后删除这个分支。 如果这个在这个分支上开发了一半突然就不需要继续开发了这个分支就要销毁了留着没啥用了。这个时候传统的 git branch -d命令删除分支的方法是不行的。 把小d换成D就可以强制删除了。 [sxkVM-4-13-centos gitcode]$ git checkout -b dev4 M ReadMe Switched to a new branch dev4 [sxkVM-4-13-centos gitcode]$ vim ReadMe [sxkVM-4-13-centos gitcode]$ git add . [sxkVM-4-13-centos gitcode]$ git commit -m dev4 [dev4 d7b27ca] dev41 file changed, 2 insertions() [sxkVM-4-13-centos gitcode]$ git checkout master Switched to branch master [sxkVM-4-13-centos gitcode]$ git branch -d dev4 error: The branch dev4 is not fully merged. If you are sure you want to delete it, run git branch -D dev4. [sxkVM-4-13-centos gitcode]$ git branch -D dev4 Deleted branch dev4 (was d7b27ca). 十二、远程操作 前面所说的所有内容都是在本地也就是我们自己的计算机上但是我们的git其实是分布式版本控制系统。同一个git仓库可以分部到不同的机器上。我们可以将Git仓库托管到github或者gitee上就可以免费获得git远程仓库。github是国外的网站速度可能会比较慢。 (1) 新建远程仓库 点 New repository可以创建仓库。 这里我选的是public 这样就可以简单的创建一个远程仓库了。 如果你写了一个项目并且公开了那么别人在阅读你的代码的时候发现问题了这个时候别人就可以在lssues中提出问题。 在实际的开发中并不会直接让代码和master分支进行合并而是会PR(Pull Requests)拉去一个请求来帮助自己和别人协作编写代码然后由管理员同意了才可以进行merge。 (2) 克隆远程仓库 a. 通过HTTPS克隆 克隆/下载远端仓库到本地需要使⽤ git clone 命令后⾯跟上我们的远端仓库的链接 [sxkVM-4-13-centos storage]$ git clone https://github.com/HaiFanNeon/remote-github.git Cloning into remote-github... remote: Enumerating objects: 3, done. remote: Counting objects: 100% (3/3), done. remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (3/3), done. [sxkVM-4-13-centos storage]$ ls gitcode remote-github [sxkVM-4-13-centos storage]$ 如果你是第一次clone的话需要输入你github或者gitee的用户和密码。 [sxkVM-4-13-centos remote-github]$ ls -al total 16 drwxrwxr-x 3 sxk sxk 4096 Mar 6 18:52 . drwxrwxr-x 4 sxk sxk 4096 Mar 6 18:51 .. drwxrwxr-x 8 sxk sxk 4096 Mar 6 18:52 .git -rw-rw-r-- 1 sxk sxk 30 Mar 6 18:52 README.md 这个仓库里面有创建远程仓库时候选择的 add a README file选项自动创建的README文件。 b. 通过SSH克隆 SSH协议是采用的公钥加密和解密的过程所以我们需要先添加一个public key将本地服务器上的public key添加到github中。 [sxkVM-4-13-centos storage]$ git clone gitgithub.com:HaiFanNeon/remote-github.git Cloning into remote-github... The authenticity of host github.com cant be established. Are you sure you want to continue connecting (yes/no)? y Please type yes or no: yes Warning: Permanently added github.com (ECDSA) to the list of known hosts. Permission denied (publickey). fatal: Could not read from remote repository.Please make sure you have the correct access rights and the repository exists. [sxkVM-4-13-centos storage]$ 在没有配置public key的情况下强行clone就会出现报错。 第⼀步创建SSH Key。在⽤⼾主⽬录下看看有没有.ssh⽬录如果有再看看这个⽬录下有没有 id_rsa 和 id_rsa.pub 这两个⽂件如果已经有了可直接跳到下⼀步。如果没有需要创建 SSH Key [sxkVM-4-13-centos .ssh]$ ssh-keygen -t rsa -C email // 这里的邮箱要跟你的github或者gitee中的邮箱相对应 Generating public/private rsa key pair. Enter file in which to save the key (/home/sxk/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/sxk/.ssh/id_rsa. Your public key has been saved in /home/sxk/.ssh/id_rsa.pub. The key fingerprint is: SHA256:6hLrOOna4IrASg/tkF8Jd4jlfpUIDU7awZMxCbla3M haifan0312163.com The keys randomart image is: ---[RSA 2048]---- | ----[SHA256]-----把id_rsa.pub中的密钥拷贝到github或者gitee中 [sxkVM-4-13-centos storage]$ git clone gitgithub.com:HaiFanNeon/remote-github.git Cloning into remote-github... remote: Enumerating objects: 3, done. remote: Counting objects: 100% (3/3), done. remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 Receiving objects: 100% (3/3), done. [sxkVM-4-13-centos storage]$ 当我们在使用ssh进行clone的时候就可以完成了。 如果有多个⼈协作开发GitHub/Gitee允许添加多个公钥只要把每个⼈的电脑上的Key都添加到GitHub/Gitee就可以在每台电脑上往GitHub/Gitee上提交推送了 。 (3) 向远程仓库推送 本地已经 clone 成功远程仓库后我们便可以向仓库中提交内容(git push命令) git push 远程主机名 本地分⽀名:远程分⽀名 如果本地分⽀名与远程分⽀名相同则可以省略冒号 git push 远程主机名 本地分⽀名 sxkVM-4-13-centos storage]$ 先进入到remote目录下面^C [sxkVM-4-13-centos storage]$ cd remote-github/ [sxkVM-4-13-centos remote-github]$ ls README.md [sxkVM-4-13-centos remote-github]$ touch hello_world.cc [sxkVM-4-13-centos remote-github]$ vim hello_world.cc [sxkVM-4-13-centos remote-github]$ 写了一个helloworld的代码^C [sxkVM-4-13-centos remote-github]$ 现在将这个代码推送到远程仓库^C [sxkVM-4-13-centos remote-github]$ git config -l user.namename user.emailemail name和email要和github/gitee中的name和email对应 [sxkVM-4-13-centos remote-github]$ git add . [sxkVM-4-13-centos remote-github]$ git commit -m create hello_world.cc [main 3914558] create hello_world.cc1 file changed, 7 insertions()create mode 100644 hello_world.cc [sxkVM-4-13-centos remote-github]$ git push origin(是往远程推送的) main(推送的是本地的main分支):main(推送到远程分支main中,如果远程分支和本地分支一样可以省略远程分支 不写)^C [sxkVM-4-13-centos remote-github]$ git push origin main Counting objects: 4, done. Delta compression using up to 2 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 372 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) remote: To gitgithub.com:HaiFanNeon/remote-github.git9bdd187..3914558 main - main [sxkVM-4-13-centos remote-github]$ 这就推送成功了。 (4) 拉取远程仓库 我在github上对代码进行了修改但是本地仓库中的这个代码还是以前的。远程仓库领先本地仓库一个版本为了使本地仓库处于最新的版本需要拉去远端代码并合并到本地。git 提供了 git pull命令该命令用于从远程获取代码并合并本地的版本。 git pull 远程主机名 远程分⽀名:本地分⽀名 如果远程分⽀是与当前分⽀合并则冒号后⾯的部分可以省略。 git pull 远程主机名 远程分⽀名 [sxkVM-4-13-centos remote-github]$ git pull origin main remote: Enumerating objects: 5, done. remote: Counting objects: 100% (5/5), done. remote: Compressing objects: 100% (3/3), done. remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (3/3), done. From github.com:HaiFanNeon/remote-github* branch main - FETCH_HEAD Updating 3914558..a192e7e Fast-forwardhello_world.cc | 6 -1 file changed, 5 insertions(), 1 deletion(-) [sxkVM-4-13-centos remote-github]$ cat hello_world.cc #include iostreamint main() {for (int i 0; i 10; i){std::cout hello github std::endl;}return 0; } [sxkVM-4-13-centos remote-github]$ 拉取成功。 十三、配置git (1) .gitignore忽略特殊文件 在我们创建仓库的时候有一个添加.gitignore(.git ignore)选项 当工作目录下面文件非常多的时候要add一般会使用add .但是因为文件非常多不想要的文件也会add如何让git只添加我们需要的文件 在Git⼯作区的根⽬录下创建⼀个特殊的 .gitignore ⽂件然后把要忽略的⽂件名填进去Git就会⾃动忽略这些⽂件了 。 如果当时没有选择这个选择在⼯作区创建⼀个也是可以的。⽆论哪种⽅式最终都可以得到⼀个完 整的 .gitignore ⽂件例如我们想忽略以 .py 结尾所有⽂件 .gitignore 的内容如下 [sxkVM-4-13-centos remote-github]$ touch .gitignore [sxkVM-4-13-centos remote-github]$ vim .gitignore [sxkVM-4-13-centos remote-github]$ cat .gitignore *.so [sxkVM-4-13-centos remote-github]$ git add . [sxkVM-4-13-centos remote-github]$ git status # On branch main # Your branch is ahead of origin/main by 1 commit. # (use git push to publish your local commits) # # Changes to be committed: # (use git reset HEAD file... to unstage) # # new file: .gitignore # [sxkVM-4-13-centos remote-github]$ 可以看到我新增了两个文件一个.gitignore一个a.so文件但是add之后查看文件状态会显示只有.gitignore是新增文件。我们commit和push一下到远端查看。 只有gitignore文件推送到了远端。 把指定⽂件排除在外的写法就是 ! ⽂件名所以只需把例外⽂件添加进去即可。 例如 .* // 排除所有.开头的隐藏文件 !.gitignore // 不排除.gitignore文件 (2) 给命令配置别名 在我们使⽤Git期间有些命令敲的时候着实让⼈头疼太⻓了。。幸运的是git⽀持对命令进⾏简化 举个例⼦将 git status 简化为 git st 对应的命令为 git config --global alias.st status --global 参数是全局参数也就是这些命令在这台电脑的所有Git仓库下都有⽤。如果不加那只 针对当前的仓库起作⽤ 。 十四、标签管理 (1) 理解标签 标签 tag 可以简单的理解为是对某次 commit 的⼀个标识相当于起了⼀个别名。例如在项⽬发布某个版本的时候针对最后⼀次 commit 起⼀个 v1.0 这样的标签来标识。 这有什么⽤呢相较于难以记住的 commit id tag 很好的解决这个问题因为 tag ⼀定要给⼀ 个让⼈容易记住且有意义的名字。当我们需要回退到某个重要版本时直接使⽤标签就能很快定位 到。 (2) 创建标签 切换到需要打标签的分支上git tag [name] 可以打一个新标签 [sxkVM-4-13-centos remote-github]$ git tag v1.0git tag查看所有标签 默认标签是打在最新提交的 commit 上的。那如何在指定的commit上打标签呢⽅法是找到历史提 交的commit id然后打上就可以了⽰例如下 [sxkVM-4-13-centos remote-github]$ git log --prettyoneline c00bceacd1760b6663b28876670757297b41c302 要忽略的文件 a192e7e29a531e6f5bbd43a6d8bd9f55c8289602 Update hello_world.cc 3914558f6f6884059ad67fff5aefa46062880701 create hello_world.cc 9bdd187d73e77502f164372852d1f54b07b7f775 Initial commit [sxkVM-4-13-centos remote-github]$ git log --prettyoneline --abbrev-commit c00bcea 要忽略的文件 a192e7e Update hello_world.cc 3914558 create hello_world.cc 9bdd187 Initial commit [sxkVM-4-13-centos remote-github]$ git tag v9.99 a192e7e [sxkVM-4-13-centos remote-github]$ git tag v1.0 v9.99 注意标签不是按时间顺序列出⽽是按字⺟排序的。可以⽤ git show [tagname] 查看标签信息。 [sxkVM-4-13-centos remote-github]$ git show v1.0 commit c00bceacd1760b6663b28876670757297b41c302 Author: HaiFanNeon haifan0312163.com Date: Wed Mar 6 19:43:28 2024 0800要忽略的文件diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..140f8cf --- /dev/nullb/.gitignore-0,0 1 *.so Git还提供可以创建带有说明的标签⽤-a指定标签名-m指定说明⽂字格式为 git tag -a [name] -m XXX [commit_id] [sxkVM-4-13-centos remote-github]$ git show v99.9 tag v99.9 Date: Wed Mar 6 20:00:54 2024 0800important tag:XXXcommit c00bceacd1760b6663b28876670757297b41c302 Date: Wed Mar 6 19:43:28 2024 0800要忽略的文件diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..140f8cf --- /dev/nullb/.gitignore-0,0 1 *.so (3) 操作标签 如果标签打错了也可以删除 。使用git tag -d tagname [sxkVM-4-13-centos remote-github]$ git tag -d v1.0 Deleted tag v1.0 (was c00bcea) [sxkVM-4-13-centos remote-github]$ git show v1.0 fatal: ambiguous argument v1.0: unknown revision or path not in the working tree. Use -- to separate paths from revisions, like this: git command [revision...] -- [file...] [sxkVM-4-13-centos remote-github]$ 因为创建的标签都只存储在本地不会⾃动推送到远程。所以打错的标签可以在本地安全删除。 如果要推送某个标签到远程使⽤命令 git push origin tagname [sxkVM-4-13-centos remote-github]$ git push origin v99.9 Counting objects: 1, done. Writing objects: 100% (1/1), 169 bytes | 0 bytes/s, done. Total 1 (delta 0), reused 0 (delta 0) remote: To gitgithub.com:HaiFanNeon/remote-github.git* [new tag] v99.9 - v99.9 [sxkVM-4-13-centos remote-github]$ 将所有标签推送到远端 git push origin --tags [sxkVM-4-13-centos remote-github]$ git push origin --tags Counting objects: 1, done. Writing objects: 100% (1/1), 168 bytes | 0 bytes/s, done. Total 1 (delta 0), reused 0 (delta 0) remote: To gitgithub.com:HaiFanNeon/remote-github.git* [new tag] v9.9 - v9.9* [new tag] v9.99 - v9.99 [sxkVM-4-13-centos remote-github]$ 如果标签已经推送到远程要删除远程标签就麻烦一点先从本地删除。 [sxkVM-4-13-centos remote-github]$ git tag -d v9.9 Deleted tag v9.9 (was d441e7e) [sxkVM-4-13-centos remote-github]$ git push origin :v9.9 remote: To gitgithub.com:HaiFanNeon/remote-github.git- [deleted] v9.9 [sxkVM-4-13-centos remote-github]$ 十五、多人协作 (1) 多人协作 目标远程main分支下的helloworld.cc文件新增代码aaa、“bbb” 实现由开发者1新增“aaa” 由开发者2新增“bbb” 条件在一个分支下协作完成 在github中新建了一个dev分支将dev分支拉取到本地仓库中 [sxkVM-4-13-centos remote-github]$ git pull From github.com:HaiFanNeon/remote-github* [new branch] dev - origin/dev Already up-to-date. [sxkVM-4-13-centos remote-github]$ git branch * main [sxkVM-4-13-centos remote-github]$ git branch -rorigin/HEAD - origin/mainorigin/devorigin/main 用户1已经完成对helloworld文件的修改 [sxkVM-4-13-centos remote-github]$ vim hello_world.cc [sxkVM-4-13-centos remote-github]$ cat hello_world.cc #include iostreamint main() {for (int i 0; i 10; i){std::cout hello github std::endl;}std::cout aaa std::endl; return 0; } [sxkVM-4-13-centos remote-github]$ 通过addcommitpush将代码提交到远端。 此时用户2对helloworld文件进行修改。修改之后add,commit,push hint: Updates were rejected because the remote contains work that you do hint: not have locally. This is usually caused by another repository pushing hint: to the same ref. You may want to first integrate the remote changes hint: (e.g., git pull ...) before pushing again. hint: See the Note about fast-forwards in git push --help for details. 会出现错误因为用户1修改之后内容已经改变用户2需要先将远端拉取到本地解决冲突然后在push。 其实在实际开发中遇到了这种冲突的问题是非常烦的在解决冲突的时候可能会把好的代码给删了从而出现问题所以在协作开发的时候一般不会在同一个分支中开发。 在不同分支下协作完成各自让某一个功能私有一个分支。 在本地创建的分⽀也可以通过推送的⽅式发送到远端 。 [sxkVM-4-13-centos remote-github]$ git checkout -b featuer-1 Switched to a new branch featuer-1 [sxkVM-4-13-centos remote-github]$ vim fucntion1 [sxkVM-4-13-centos remote-github]$ cat fucntion1 aaaaaa [sxkVM-4-13-centos remote-github]$ git add fucntion1 [sxkVM-4-13-centos remote-github]$ git commit -m add fucntion1 [featuer-1 29ce283] add fucntion11 file changed, 1 insertion()create mode 100644 fucntion1 [sxkVM-4-13-centos remote-github]$ git push origin featuer-1 Counting objects: 4, done. Delta compression using up to 2 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 267 bytes | 0 bytes/s, done. Total 3 (delta 1), reused 0 (delta 0) remote: Resolving deltas: 100% (1/1), completed with 1 local object. remote: remote: Create a pull request for featuer-1 on GitHub by visiting: remote: https://github.com/HaiFanNeon/remote-github/pull/new/featuer-1 remote: remote: To gitgithub.com:HaiFanNeon/remote-github.git* [new branch] featuer-1 - featuer-1 [sxkVM-4-13-centos remote-github]$ 我在我的windows里面下载了个git然后用windows端来模拟合作人员合作人员创建了feature-2分支并提交到远端。 LenovoDESKTOP-5A1B7J0 MINGW64 ~/Desktop/杂件/remote-github (main) $ git checkout -b feature-2 Switched to a new branch feature-2LenovoDESKTOP-5A1B7J0 MINGW64 ~/Desktop/杂件/remote-github (feature-2) $ vim feature2LenovoDESKTOP-5A1B7J0 MINGW64 ~/Desktop/杂件/remote-github (feature-2) $ cat feature2 bbbbbbLenovoDESKTOP-5A1B7J0 MINGW64 ~/Desktop/杂件/remote-github (feature-2) $ git add . warning: LF will be replaced by CRLF in feature2. The file will have its original line endings in your working directoryLenovoDESKTOP-5A1B7J0 MINGW64 ~/Desktop/杂件/remote-github (feature-2) $ git commit -m add feature2 [feature-2 0579275] add feature21 file changed, 1 insertion()create mode 100644 feature2LenovoDESKTOP-5A1B7J0 MINGW64 ~/Desktop/杂件/remote-github (feature-2) $ git push origin feature-2 Enumerating objects: 13, done. Counting objects: 100% (13/13), done. Delta compression using up to 16 threads Compressing objects: 100% (8/8), done. Writing objects: 100% (9/9), 853 bytes | 853.00 KiB/s, done. Total 9 (delta 4), reused 0 (delta 0), pack-reused 0 remote: Resolving deltas: 100% (4/4), completed with 2 local objects. remote: remote: Create a pull request for feature-2 on GitHub by visiting: remote: https://github.com/HaiFanNeon/remote-github/pull/new/feature-2 remote: To https://github.com/HaiFanNeon/remote-github.git* [new branch] feature-2 - feature-2 在本地你看不⻅他新建的⽂档他看不⻅你新建的⽂档。并且推送各⾃的分⽀时并没有任何冲突你俩互不影响⽤起来很舒服 正常情况下你俩就可以在⾃⼰的分⽀上进⾏专业的开发了但天有不测⻛云你的⼩伙伴突然⽣病了但需求还没开发完需要你帮他继续开发于是他便把feature-2分⽀名告诉你了。这时你就需要在⾃⼰的机器上切换到feature-2分⽀帮忙继续开发要做的操作如下 [sxkVM-4-13-centos remote-github]$ git pull // 拉取 remote: Enumerating objects: 13, done. remote: Counting objects: 100% (13/13), done. remote: Compressing objects: 100% (4/4), done. remote: Total 9 (delta 4), reused 9 (delta 4), pack-reused 0 Unpacking objects: 100% (9/9), done. From github.com:HaiFanNeon/remote-github* [new branch] feature-2 - origin/feature-2 There is no tracking information for the current branch. Please specify which branch you want to merge with. See git-pull(1) for detailsgit pull remote branchIf you wish to set tracking information for this branch you can do so with:git branch --set-upstream-toorigin/branch featuer-1[sxkVM-4-13-centos remote-github]$ git branch * featuer-1main [sxkVM-4-13-centos remote-github]$ git branch -a * featuer-1mainremotes/origin/HEAD - origin/mainremotes/origin/devremotes/origin/featuer-1remotes/origin/feature-2remotes/origin/main // 切换成功后便可以看⻅feature-2分⽀中的function2⽂件了接着就可以帮⼩伙伴进⾏开发。 [sxkVM-4-13-centos remote-github]$ git checkout -b feature-2 origin/feature-2 Branch feature-2 set up to track remote branch feature-2 from origin. Switched to a new branch feature-2 [sxkVM-4-13-centos remote-github]$ (2) 将内容合并到master 在远端合并分支的话很简单github中有提示跟着提示点点点就完事了。在以后合并分支的时候审查员可能不会是自己。 合并完之后就可以把feature12分支给删除了。 (3) 远程分⽀删除后本地git branch -a依然能看到的解决办法 当前我们已经删除了远程的⼏个分⽀使⽤ git branch -a 命令可以查看所有本地分⽀和远程分 ⽀但发现很多在远程仓库已经删除的分⽀在本地依然可以看到。 [sxkVM-4-13-centos remote-github]$ git branch -afeatuer-1 * feature-2mainremotes/origin/HEAD - origin/mainremotes/origin/devremotes/origin/featuer-1remotes/origin/feature-2remotes/origin/main [sxkVM-4-13-centos remote-github]$ 使⽤命令 git remote show origin 可以查看remote地址远程分⽀还有本地分⽀与之相对应关系等信息。 [sxkVM-4-13-centos remote-github]$ git remote show origin * remote originFetch URL: gitgithub.com:HaiFanNeon/remote-github.gitPush URL: gitgithub.com:HaiFanNeon/remote-github.gitHEAD branch: mainRemote branches:main trackedrefs/remotes/origin/dev stale (use git remote prune to remove)refs/remotes/origin/featuer-1 stale (use git remote prune to remove)refs/remotes/origin/feature-2 stale (use git remote prune to remove)Local branches configured for git pull:feature-2 merges with remote feature-2main merges with remote mainLocal ref configured for git push:main pushes to main (local out of date) 此时我们可以看到那些远程仓库已经不存在的分⽀根据提⽰使⽤git remote prune origin命令 [sxkVM-4-13-centos remote-github]$ git remote prune origin Pruning origin URL: gitgithub.com:HaiFanNeon/remote-github.git* [pruned] origin/dev* [pruned] origin/featuer-1* [pruned] origin/feature-2 [sxkVM-4-13-centos remote-github]$ 删除完毕 这样就删除了那些远程仓库不存在的分⽀。对于本地仓库的删除前面说过。git branch -d 十六、企业级开发模型 ⼀个软件从零开始到最终交付⼤概包括以下⼏个阶段规划、编码、构建、测试、发布、部署和维护 。 最初程序⽐较简单⼯作量不⼤程序员⼀个⼈可以完成所有阶段的⼯作。但随着软件产业的⽇益 发展壮⼤软件的规模也在逐渐变得庞⼤。软件的复杂度不断攀升⼀个⼈已经hold不住了就开始 出现了精细化分⼯。如下图所⽰   但在传统的IT组织下开发团队(Dev)和运维团队(Ops)之间诉求不同 • 开发团队(尤其是敏捷团队)追求变化 • 运维团队追求稳定 双⽅往往存在利益的冲突。⽐如精益和敏捷的团队把持续交付作为⽬标⽽运维团队则为了线上的 稳定⽽强调变更控制。部⻔墙由此建⽴起来,这当然不利于 IT 价值的最⼤化。 为了弥合开发和运维之间的鸿沟需要在⽂化、⼯具和实践⽅⾯的系列变⾰⸺DevOps正式登上舞 台。 DevOpsDevelopment和Operations的组合词是⼀种重视“软件开发⼈员Dev”和“IT运维技术⼈员Ops”之间沟通合作的⽂化、运动或惯例。透过⾃动化“软件交付”和“架构变更”的流程来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。在DevOps的软件开发过程包含计划、编码、构建、测试、预发布、发布、运维、监控由此可⻅DevOps的强⼤。举⼀个很简单的例⼦就能说明这个问题。⼀个软件的迭代在我们开发⼈员看来说⽩了就是对代码进⾏迭代那么就需要对代码进⾏管理。如何管理我们的代码呢那不就是Git分布式版本控制系统所以Git对于我们开发⼈员来说其重要性就不⾔⽽喻了   (1) 系统开发环境 用户访问的网站软件等都是部署到服务器上稳定的代码开发人员拥有自己的服务器服务器中部署的是开发中的代码。 用户和开发人员之间被不同的环境隔离开用户访问的是线上/发布环境 开发人员访问的是开发环境。 开发环境开发环境是程序猿们专⻔⽤于⽇常开发的服务器。为了开发调试⽅便⼀般打开全部错 误报告和测试⼯具是最基础的环境。测试环境⼀个程序在测试环境⼯作不正常那么肯定不能把它发布到⽣产机上。该环境是开发环 境到⽣产环境的过渡环境。预发布环境该环境是为避免因测试环境和线上环境的差异等带来的缺陷漏测⽽设⽴的⼀套环境。 其配置等基本和⽣产环境⼀致⽬的是能让我们发正式环境时更有把握所以预发布环境是你的产 品质量最后⼀道防线因为下⼀步你的项⽬就要上线了。要注意预发布环境服务器不在线上集成服 务器范围之内为单独的⼀些机器。⽣产环境是指正式提供对外服务的线上环境例如我们⽬前在移动端或PC端能访问到的APP都是 ⽣产环境。 这⼏个环境也可以说是系统开发的三个重要阶段开发-测试-上线。⼀张图总结 对于规模稍微⼤点的公司来说可不⽌这么⼏个环境⽐如项⽬正式上线前还存在仿真/灰度环境再⽐如还存在多套测试环境以满⾜不同版本上线前测试的需要。⼀个项⽬的开始从设计开始⽽⼀个项⽬的成功则从测试开始。⼀套良好的测试体系可以将系统中绝⼤部分的致命Bug解决在系统上线之前。测试系统的完善和成熟也是衡量⼀个软件企业整体⽔平的重要指标之⼀测试往往被忽视因为它对可以的隐性、对软件开发企业不产⽣直接的效益但是它却是软件质量的最终保障乃⾄项⽬能否成功的重要因素 。   (2) Git分支设计规范 环境有了概念后那么对于开发⼈员来说⼀般会针对不同的环境来设计分⽀ 分支 名称 使用环境 master 主分支 生产环境 release 预发布分支 预发布/测试环境 develop 开发分支 开发环境 feature 需求开发分支 本地 hotfix 紧急修复分支 本地 master 分⽀ • master 为主分⽀该分⽀为只读且唯⼀分⽀。⽤于部署到正式发布环境⼀般由合并 release 分⽀得到。 • 主分⽀作为稳定的唯⼀代码库,任何情况下不允许直接在 master 分⽀上修改代码。 • 产品的功能全部实现后最终在master分⽀对外发布另外所有在master分⽀的推送应该打标签 tag做记录⽅便追溯。 • master 分⽀不可删除。 release 分⽀ • release 为预发布分⽀基于本次上线所有的 feature 分⽀合并到 develop 分⽀之后基 于 develop 分⽀创建。可以部署到测试或预发布集群。 • 命名以 release/ 开头建议的命名规则: release/version_publishtime 。 • release 分⽀主要⽤于提交给测试⼈员进⾏功能测试。发布提测阶段会以 release 分⽀代码 为基准进⾏提测。 • 如果在 release 分⽀测试出问题需要回归验证 develop 分⽀看否存在此问题。 • release 分⽀属于临时分⽀产品上线后可选删除。 develop 分⽀ • develop 为开发分⽀基于master分⽀创建的只读且唯⼀分⽀始终保持最新完成以及 bug 修 复后的代码。可部署到开发环境对应集群。 • 可根据需求⼤⼩程度确定是由 feature 分⽀合并还是直接在上⾯开发⾮常不建议。 feature 分⽀ • feature 分⽀通常为新功能或新特性开发分⽀以 develop 分⽀为基础创建 feature 分 ⽀。 • 命名以 feature/ 开头建议的命名规则 feature/user_createtime_feature 。 • 新特性或新功能开发完成后开发⼈员需合到 develop 分⽀。 • ⼀旦该需求发布上线便将其删除。 hotfix分⽀ • hotfix 分⽀为线上 bug 修复分⽀或叫补丁分⽀主要⽤于对线上的版本进⾏ bug 修复。当线上 出现紧急问题需要⻢上修复时需要基于 master 分⽀创建 hotfix 分⽀。 • 命名以 hotfix/ 开头建议的命名规则: hotfix/user_createtime_hotfix • 当问题修复完成后需要合并到 master 分⽀和 develop 分⽀并推送远程。⼀旦修复上线便 将其删除。 以上说的是企业级常⽤的⼀种Git分⽀设计规范Git Flow模型 十七、结尾 关于Git的内容就到此结束。希望对大家有所帮助。
http://www.zqtcl.cn/news/795305/

相关文章:

  • 可以做配音兼职的网站产品网站怎样做外部链接
  • 如何制作网站效果图做外单要上什么网站
  • 网站开发预算编制网站可以制作ios
  • 强化网站建设网页翻译怎么弄出来
  • 长春火车站到龙嘉机场高铁时刻表视频网站建设公司排名
  • 武进网站建设代理商google官网下载
  • 简单网站开发流程图知乎怎么申请关键词推广
  • 成寿寺网站建设公司文登区做网站的公司
  • 建设一个网站用什么软件下载阿里外贸平台网站建设
  • 可信网站myeclipse网站开发
  • 做设计找素材的 网站有哪些网站建设实训个人总结
  • 浙江省建设厅继续教育官方网站网站做vr的收费
  • 建造网站 备案苏州手机网站设计
  • 做外贸卖小商品是哪个网站手机首页设计
  • 大连网站制作公司营销策划公司有哪些职位
  • 2019深圳网站设计公司排名网站设计的思想
  • 试客那个网站做的好seo管理平台
  • 增加网站关键词库网盟推广合作
  • 企业门户网站内容建设濮阳网络培训基地
  • 做亚马逊运营要看哪些网站免费咨询电脑问题
  • 如何用html制作网站app开发要多少钱
  • 中国搜索提交网站信息网络犯罪
  • 网站服务器做下载链接分销平台系统源码
  • 网站管理助手建站沈阳专业网站建设企业
  • 企业网站开发公司大全建筑工程培训
  • 免费网站开发模板云南省网站开发软件
  • dede小游戏php网站源码广州网站vi设计报价
  • 邯郸建设局网站资质申报wordpress 前端 插件
  • 关于asp_sql网站开发的书籍小程序跳转网页方法
  • 昆明网站开发公司电话建设手机银行的网站