| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 开发工具 -> gitee教程(超全,超详细,超长) -> 正文阅读 |
|
[开发工具]gitee教程(超全,超详细,超长) |
俺今天刚写完 专利技术交底书,于是有了一点点空闲时间。虽然常用github,但心里面总感觉缺点什么,于是有了这篇文档,希望这篇文档能在我忘记怎么用gitee的时候瞬间教会我。并且也能让我在写文档的过程中对git的理解更深。本篇文章的起因是因为一个知乎老哥的评论,它的写作风格,我很喜欢。 ?于是本篇也是尝试(体验)用他这种风格来进行写作。 没有一个软件规格书,就没有一个好的软件(没有一个计划和目录,那么就没有一篇好文章) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?------Stack OverFlow创始人 joel Spolsky 目录 正文什么是gitee?要学gitee(国内最大的托管平台),你首先得知道gitee是什么。官方话称他为? 代码托管平台。 而且你要知道git和github(国外最大的代码托管平台)有什么区别? 网上有个回答让我喜出望外 “git” 和“github”的区别,就像是 【魔兽争霸和对战平台的区别】。 历史:以前国外有很多代码托管平台及开源机构,然后国内没有,然后马越想搞开源,当时没人投他,然后他就自己搞,搞了个叫开源中国的公司,然后慢慢有钱了,然后发现没有搞国内托管平台,于是就搞了一个gitee。 为什么我现在开始使用gitee?以前,大家都用github,现在大家都用gitlab,而我自己创建了公司,没钱,然后买的服务器太辣鸡配不起gitlab。于是就用了gitee。 然后再客观分析一下gitee的好处,对于国人来说: 1.gitee是国内的不卡,github非常卡(走梯子才能快) 2.现在互联网形势不好,用国内的产品比较稳定 3.通过多年的累计和扶持,gitee已经比较成熟 4.gitee全面支持中文,非常棒,不再需要右键谷歌机器翻译了 所以建议大家用gitee git学习要用gitee得先学git,不学git就相当于你使用对战平台和别人联机玩游戏,但是你没下游戏,然后只能玩不了~~~ 批注:刚刚偷偷瞥了眼,廖雪峰的git教程(我觉得他写的非常通俗易懂),大家不想看我写的git,可以看他的,传送门Git简介 - 廖雪峰的官方网站。 学git你得知道好处,它能帮你【管理】昨天和今天【改动的文件】,还给你做【备份】;它能管理让你和你朋友一起【协作管理】同一个文件; 安装git我是win10电脑(其他系统的同学请看上述廖雪峰的git博客博客),首先输入在cmd中输入git命令,用来判断你是否安装git。 如果没有安装,可以直接去官网下载并且进行安装,传送门Git 安装后,右键打开git bash here 自报家门,git采用分布式协作,所以需要知道每台计算机的地址,是以名字和邮箱进行区分的。 所以需要设置你的名字和邮箱
?创建版本库版本库是用来存放你的项目的,对你项目的一删一改,版本库都能监控的到。 首先寻找一个盘(切记不能是含中文目录),创建一个文件夹 右键打开git命令行,输入命令初始化(这样版本库才能管理此文件夹中的内容)?
?然后就产生了个.git的文件,它是用于记录项目的改动的,千万不能删 git引导教程?在gitee_suyuan 创建一个文件,用notepad++(别用微软的记事本,因为他团队自作聪明加了十六进制的开头,然后导致浏览器访问为?程序编译失败等问题) 把大象放入冰箱还要三步(打开冰箱-放入大象-关闭冰箱),而把文件交给git管理,只要【两步】。 step1:将文件预先添加到git仓库
如果没有出现任何提示,代表你这条命令执行成功了,大神的开发作风。(大神代表 林纳斯-托瓦兹) step2:然后提交给git仓库,并且附上说明,大神这样写是为了统一规范。
?1 file changed(文件改变),1 insertion 插入(代表行,我只写了一行) ?git操作必须在存在.git的仓库下进行(否则没有意义,git init除外) 那么如果我已经提交成功了,我再次提交一个原有的相同的文件会怎么样?我的科学界男神费曼说要勇敢尝试,科学求证(即使别人做过,你也要做,一方面更加熟悉这个操作,另一方面也许别人是错的呢?)那我们就来做个测试吧。 git add note.txt 没有反应! 说明添加的时候,并不会进行任何计算,只是单纯的把它放到了某个集合中。 ?git ?commit -m "我刚刚再次添加了同样的文件" 这里他做出了检测,告诉了我在主分支上(git是存在分支的,以此来区分测试代码、开发版代码、新方向的代码,而主分支通常是最重要的分支,线上版),没有提交合并,所以就把创建的工作树给清理了。 说明在提交的时候,他会首先创建工作树进行记录版本,然后进行计算是否更改了信息,没有改的话,他就会把刚刚创建的工作树删除,不会做任何操作。 尝试多个文件进行添加,他是通过空格隔开,也可以全量添加 add .? 但是不好,计算量大。 我创建了一个note2,也修改了note。现在在进行add,对了add在commit之前会一直记录,你add了一行,然后在进行add命令,都会被记录叠加,最后commit对他们一次处理。 ?他修改了2个文件,和插入了4行。删除了一行。(我在note文件下面加了一行,在note2加了2行) 说明他是,将存在的文件进行覆盖,将新文件进行创建。 ?而引申出来的,我们为什么能在github上看到,删除和更新的内容?,因为他将上个版本的文件与新出来的文件做了比对,从而知道删除了什么,新增了什么。这做法确实很聪明。 俺有一个想法,俺已经交给git去管理项目了,那对其中的一个项目进行改动,git知道吗?然后俺对note文件进行改动 通过git status去查询当前的项目状态 ?从中能看到modified(改动了) 说明他,能通过以前的文件和现在的文件做比对,而得到现在的情况 那俺想他能查看到具体改动了哪些文件吗? 通过diff命令 git diff 文件名 他告诉你了,上一个版本是2行,现在是3行,并且会显示2个文件 说明他,并没有做具体的文件对比,而只是给你展示了双方的文件内容。 这样看完之后,对于量大的问题确实没有太好的解决方式,其实就是个简单的2个文件【以行】作【为单位】进行【字符和位置互相比对】功能。--github和gitee解决了 然后确认没问题,通过git add 文件名进行提交,此时他在用git status他就会从红色变成绿色,代表已经加入,并且会告诉你,即将覆盖的文件是哪些。 ?然后通过git commit -m 进行提交。整个更新到仓库的流程就完成了。 ?现在比方说小彭干了件蠢事,把文件删错了然后提交了。项目经理发现了无法编译了,于是大叫,到底是哪个笨蛋干的。然后小彭想到了自己昨天更改了文件,然后他想【大神发明了这个东西,大神肯定想到有某个傻子搞错了,得有办法回退到正常的版本】于是他就找到了下面的命令 git log就能知道自己干了啥 commit是hash值的id代表的是你提交的版本号(通过他进行回退),为什么用hash因为hash叫做指纹,几乎不会重复。 author代表作者,就是你开头安装完之后,输入的本机信息 Date代表修复时间 刚刚的中文是你每次提交commit(快照-备份)的时候 -m 说明 回退命令需要根据你的log显示的id进行回退,你可以不用写全git就能自动去找
说明,他是根据id,将现在的版本定为,你回退的版本 当然,你也会问,他会把之前那个删掉吗,不会的,如果你没有关闭窗口,根据id照样可以回退回去。而且我猜测大神的写法,为了提高空间利用率,肯定是只存储了修改部分的文件,而不是全部项目。那测试也很简单,你把他全删除了,看看能否回退?(如果能,则代表大神只存储了所有修改部分的文件,没有对整个主分支进行备份)。 居然恢复了,大神也应该想到了这个问题,所以在git中备份了一个主分支的内容,只用主分支+修改的文件进行替换就能恢复到任意版本。 Hard代表的是指针,他只是将当前的版本回退过去了。另外如果你回退错了,又关闭了窗口,不记得是哪一个回退了,大神也写了个功能,能够查看你的回退日志。 git reflog 然后在进行回退 俺刚刚回到了1792的版本,答案是原来是4d7b版本,我再通过reset --hard 4d7b就可以回去了 从下往上看,是每一次commit,然后执行了reset命令。看的很清楚。 说明,大神记录了每一次快照改变的情况。 当没有东西改变,通过git status,就是干净的clean。如果本地有东西改变,他就会告诉你改变了,但是没有添加(add)到集体工作的集合中(暂存区)。当添加后,就可以commit了(他就把暂存区的东西全部剪切到分支中,这里我们用的是主分支,之后在status代表是干净的了)。 git 删除也算是修改,所以也得commit,小文是个菜到抠脚的程序员,有天被项目经理看到了他的代码,觉得很辣鸡,没有什么用,叫小文把他删除了。然后小文就在本地删除了,通过commit进行提交。 ?但是提示失败了,没有改变。因为对于删除操作,和你添加和修改一样的。你要告诉大神你删除了哪个文件,删除比较敏感,避免有人误删,大神想出了这个法子。让别人没有那么容易删除,必须确定到具体哪个文件才可以。 然后你得和添加修改一样,先把他放到暂存区。 命令是git rm 文件名,之后在git commit -m "原因" ?通过git log版本日志,已经是删除了。 git总结:?到目前为止你已经学完了git几乎所有的核心使用命令了,可以说,你如果单排,自己一个人玩单机版,已经可以来回自如。联机版马上就讲,我们先总结一下常用命令。
我们在来总结一下,实际情况。 你想创建新的项目库创建一个文件夹(整个目录不能有中文,windows系统编码问题),然后在此文件中,右键git bash 输入git init 你想用git管理你的项目把项目复制到这个文件夹下,输入git add .? 再输入 git commit -m "这是我项目的第一个版本" 你想更新了你的代码输入git add 你的代码文件 ,再输入git commit -m "我刚修改了x" 你想删除你的没用的文件输入git rm 没用的文件路径和名称, 再输入git commit -m "我刚删除了x" 你做了新代码,发现新功能不 好,然后回溯到某个版本输入git log,再输入git reset --hard 版本号(通过git log看到的hash值就是版本号) 如果回溯也错了,不记得是哪个版本了输入git reflog,可以看到所有的版本,如A版本和B版本还有C版本,你回溯到了B版本,那么A版本的id不记得了,通过reflog就可以看到回溯的操作和所有版本的commit,再通过git reset --hard 版本号 回来。 如果你想看git的步骤到哪了,有没有需要提交的东西输入git status,可以看到目前各个区域的情况,如果想要对比这个文件和之前的文件的情况,可以通过git status发现哪些文件和版本库的分支不一样。在通过status列出的文件,进行git diff 文件名 对比。 你的第一个托管的gitee上的项目联机版开始了 人与人之间需要通信,小芳的内容怎么给小王改呢?不可能现场拷贝文件吧,那远在天边的人怎么办呢,所以通过一台服务器,小芳将小王的文件拉取过来。这个服务器就叫做远程仓库,当然我不用搭建他的服务,服务器24小时运行,我可遭不住,于是就有了托管平台,github和gitee等。只用注册一个账号即可享用服务gitee(不能超过5个人一起开发),如果是大公司还是建议用gitlab,因为他是免费的,而且服务可以搭在任何一台机器上。 自己先注册一个gitee。 然后创建ssh,首先进入主目录看看你有没有创过。 主目录,命令git config --list --show-origin 这个就是你的主目录地址 ?也就是包含.gitconfig文件的文件夹 打开主目录,看看有没有叫.ssh的目录, 再看看这个目录下有没有
一路回车。 ?已经成功生成了这2个文件了 (pub的为公钥可以随便给人,非pub的为私钥不能给别人,否则别人可以连你计算机,可把孩子吓坏了!) 然后打开gitee,创建一个代码仓库。 禁止在代码仓库中,点击管理,添加公钥。
仓库公钥只能pull和clone(下载),不能push gitee中有保护分支设置,这里,你可以选择仓库让谁可以进行push推送修改等。在仓库成员管理中可以指定设定用户的身份。但是要访问仓库必须设置个人公钥。 由此说明,gitee的仓库权限逻辑是,首先获取用户私钥信息,然后去看用户在不在这个仓库的管理权限中,如果权限符合则可以推送。 个人公钥设置,不设置不能在gitee推送自己的代码。 ?标题最好为,你用的哪台电脑生成的公钥,让自己记得。ssh是大神创建的一种安全措施,这样别人就没有办法伪造成你本人,然后进行提交了。 说明,如果你是魔鬼,你想要去提交恶意破坏别人的项目,那你除非是内部成员才可以,由管理员把你的成员权限加上去,你才是内部成员。才能提交代码。 因为我们可能在家有台电脑,在公司有电脑,在小媳妇家里也有个电脑,所以你可以把这三台电脑的公钥都添加上去 ,这样的话,你这三台电脑都可以以你的身份(内部成员的身份)提交了。 下面粘贴 id_rsa.pub 中的内容。点击添加完成。 将本地与远程仓库关联,复制远程仓库的ssh git@gitee.com:BigDataBugKing/suyuan.git 在git中输入命令,关联远程分支 git remote add origin git@gitee.com:BigDataBugKing/suyuan.git 注意中间那个是:不是/ 注意最好手打,否则可能失败,复制可能会自带空格。remote代表的是远程仓库命令,告诉他添加到哪个仓库,origin是github中默认的名字,我们在gitee中也使用这个(当然你也可以改成其他的)。绿色部分是可以改变的内容。我改的就是suyuan 通过git remote -v可以查看是否关联成功。 以后这个suyuan(自定义的远程仓库名称)代表的就是我创建的suyuan.git(映射关系) 不需要输入太复杂的地址就能对他进行推送到gitee中。 ?推送至远程分支(会将本地分支的内容,推送至远程分支) git push -u suyuan?master 本地远程不一致?合并!如果gitee远程仓库有的东西,你本地没有,那么就会出现这种情况(程序就不能push,因为push本质就是覆盖,直接push会导致中央仓库代码丢失,所以一定要保证比远程仓库的东西多) ?那么如果,我想删除gitee远程仓库的东西怎么办。可以直接强制push,替换中央仓库中的内容。 git push -f suyuan master 另外一种保险(把中央仓库数据拉到本地,在本地合并) git pull --rebase suyuan master ?本地分支出现了,然后将他推上去,给定远程仓库地址别名和分支名。 git push suyuan master 查看gitee远程仓库,是否有author.txt文件 ?成功。 ?更新代码到gitee在成都市中心某个地下车库里,小王一个人在写公司项目,一个人也很方便,用git就完成了,由于进度原因,第三者出现, 老板让小芳加入了项目。于是协作就成了头疼的问题。 他们合用一个远程仓库,然后小王提交了代码到远程仓库gitee,小芳本地没有那个文件,于是小芳就得先把自己的文件写好了更新上去,结果出现了上集那个意外,于是她要把小王的文件从远程仓库拉下来。再进行合并,合并后在提交上去。但是此时他们修改的是同一个文件,是否会出现覆盖问题呢? 此时小芳本地仓库没有这个文件,进行pull拉取。 ?本地代码直接被覆盖掉了。所以如果小芳要进行拉取前,首先得先进行数据备份。 然后在将备份的数据覆盖本地仓库,然后进行git?diff 文件。进行合并操作,再将合并的数据提交上去。 然后通过diff就知道哪里做了改变,进行代码合并。 总结出来的合并步骤原则就是: 1.pull之前首先备份(除.git外的所有文件)pull后本地仓库就变成了远程仓库的内容 2.将备份的文件复制过来进行替换,此时工作区(本地的文件)就与本地仓库的不一致了 3.通过git status就能找到了,哪些文件和以前不同了 4.通过git diff 文件名,就能确定哪些内容被更改和添加了,从而拿本地的和远程分支上的内容,进行本地合并,之后在push上去完成更新。 实验程序新功能,分支分支是另一条程序线,小芳想了一个新功能,很牛逼,为了不影响到线上分支,于是他就开了自己的分支,用于开发这个功能,当开发完成后,再与线上的分支进行合并。 之前咱们是不是试过版本回溯,其中head指针指向的是当前分支。 从数据上来说呢,每个分支相当于独立的,我们可以在当前分支中进行回溯和查看版本(如:git reflog) 首先创建分支 suyuanPathReduce(可自定义)
?那我怎么知道我创建好没有呢?通过 git brach查看,如果冒*号的,代表的是当前分支 ? 现在我想切换的另一个分支里开始工作了 checkout 有签出,迁入的意思 git checkout??suyuanPathReduce 然后我们在git branch查看一下 ?那么有趣的来了,我现在新分支(suyuanPathReduce),以后新分支都代表这个分支。 修改了author.txt的内容,在切换到主分支,将它合并,会不会将主分支的内容直接进行覆盖呢? 覆盖了不就是丢数据了吗(冲突)。我们测试一下。 然后,提交 add author然后commit -m? 然后回到主分支checkout master,然后合并分支,git merge suyuanPathReduce 执行merge之前 执行merge之后 确实是直接覆盖了,那怎么办呢,这样可能会删除同事的数据。 我们先来查看一下,这样的话,主分支是否产生了新的版本,如果是的话,则可以diff对比出来哪个被修改了,然后再在分支上修改,修改后进行merge(覆盖)。发现,查不到。因为合并后,工作区直接就是干净的了。(通过status,找不到文件)。 那么冲突怎么办?合并分支需要注意什么?不使用merge,合并前进行将分支进行备份,然后切换为主分支,拉取最新数据,将备份的数据覆盖过来,此时通过status,查看被修改的文件,通过diff进行文件比对,最终进行合并。 1 git checkout suyuanPathReduce 2 进行复制(非.git的文件)作为备份分支 3 切回主分支git checkout master 4 拉取最新数据git pull suyuan(你之前关联的远程库别名) 分支名 5.将备份文件进行覆盖 6.通过git status就能发现哪些文件被改动了,通过git diff 比对文件,进行解决冲突 发现删除了"作者",新增了"我是新分支内容?"。 于是进行手动解决冲突,添加作者。 进行git add author.txt(添加到暂存区), 进行git commit -m "我解决完冲突了"(提交到本地),git push suyuan master(将本地的数据推送到远程仓库) 我们看一下远程仓库是否存在 ? ?完成 ?时光倒流到以前的项目?首先选择你想倒流的分支git check branch(查看分支),选择分支git checkout 分支名 ?然后git log(查看以前的版本记录),如果版本之前有过回溯(略过了一些回溯),使用git reflog查看回溯情况。 然后看到了想要回溯的版本,根据log中显示的每个版本对应的hash值id进行回溯,git reset --hard ec32(某个hash值) |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 22:59:32- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |