项目部署与拉取Github/Gitlab/Gitee的合理步骤以及会遇到的问题

news2024/11/17 11:49:46

踩了很多坑,总结一下。首先有两种需求,第一种是本地的项目部署到Github上,第二种是将团队的项目拉到本地。


(初始)本地 -> GitHub

因为本地到Github有可能是第一次去推送代码,也有可能是你更改了拉下来的代码再推送,这里初始指的是前者,初次部署。

  1. 首先在GitHub创建一个空仓库,位置如下,三个地方都可以。
    在这里插入图片描述

  2. 进去之后按照要求填写即可。
    其中README文件,在这个文件里,可以写项目的相关信息,之后会出现在该仓库主页的下面的位置。
    .gitignore选择你的语言即可,之后在这个文件里你可以写当你把本地代码上传代码至GitHub时,想要忽略上传的文件。
    对于license,内容比较多,你选择MIT即可,它是最宽松的license,意味着完全开源,别人想怎么用就怎么用;与之相对GPL是最严的。
    建议不要点README文件和.gitignore文件,因为你如果点了,当点击最下面创建仓库时,它会帮我们做一次初始提交。于是我们的仓库就有了README和.gitignore这两个文件。然后我们把本地项目关联到这个仓库时,我们在关联本地与远程时,两端都是有内容的。但是这两份内容并没有联系(可能本地推到远程时,会生成一个“码”类似的东西,来互相识别,而这里没有这个步骤。),当我们推送到远程(git push:failed to push some refs to)或者拉取,都会有还没有被跟踪的内容,所以推送和拉取总是失败。
    或者刚开始就用我下面说到的将团队项目拉到本地的方式拉项目,这样就可以点呢些东西,但我觉得还是上面说的方式更正常些。
    在这里插入图片描述
    在这里插入图片描述

  3. 在本地IDEA中首先你需要在Terminal中输入git init,目的就是来初始化本地库,让本地可以被Git进行版本控制,以及Git的其他功能。完成后,会出现如下变化。
    其中,红色代表创建之后没有add,没提交,不在版本控制范围之内,需要先add文件。
    绿色代表add之后,但没有commit。
    蓝色代表原本有一个文件,改动过后没有commit是蓝色的,提交之后,变成正常颜色(无色)。
    黄色代表被.gitignore文件声明而忽略。
    !!!注意:请先把.girignore拉到根目录下(demo),或者直接在根目录创建一个(下面会解释)。
    在这里插入图片描述
    在这里插入图片描述

  4. 之后开始进行git add和git commit操作。
    首先解释git add,它的意思把目标文件添加到暂存区,暂存区有什么意义呢?不能直接commit吗?详情看我这篇文章,一定要结合图。
    在这里插入图片描述
    这里的话,你可以用:

    git add .
    git commit -m "备注"
    

    也可以用右上角IDEA的快捷键(绿色对勾),直接commit。
    这里要额外说一下,新建文件时IDEA会询问你是否将新的文件git add
    在这里插入图片描述
    如果你不点,在点击右上角commit时,左侧出现了“Unversioned Files”,中文就是没有被版本控制的文件,也就是没有add,如果你点了,这步就相当于git add。这正好也回答了上面为什么直接点commit快捷键,没有add,就能commit。
    在这里插入图片描述

  5. 进行git push推送(使用HTTP方式)。
    在这里插入图片描述
    在这里插入图片描述
    可以发现项目已经成功推送到Github上。
    这里有一个问题,为什么我设置的.gitignore并没有忽略?
    第一个原因可能是,在最初git add时并没有更改.gitignore。.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。解决方法就是先把本地缓存删除(改变成未track状态),然后再提交:

    git rm -r --cached .
    git add .
    git commit -m 'update .gitignore'
    

    还有一个原因,你要把.idea里的.gitignore移到根目录下,或者直接新建一个。如果.gitignore在.idea里,你所有配置的东西,都只会在.idea目录下生效。所以一定要记得把.gitignore拖到根目录下(demo)。
    而且在没有git add文件时,你变换.gitignore,对应的文件会变黄(需要等一下才显示)。
    在这里插入图片描述
    忽略之后,commit时IDEA也会直接不显示。当然如果你不想动.gitignore(比如有时候只是一个比较特别的文件;或者你git clone下来时,远程没有的东西,就会显示在“Unversioned Files”,你也没必要改变你的.gitignore,只要别add就行,后面会说的),不add就行。
    在这里插入图片描述

GitHub -> 本地

首先第一个问题,远程到本地到底是用git clone还是git pull。下面我分别为大家演示:
1)在Github没选REDEME或gitignore时,也就是空项目时,直接git pull(我们的标题时远程项目拉到本地,这个情况只是演示下)。
错误信息是说无法发现远程HEAD指针,这个HEAD指针是说,当前Git的“版本”(Git是版本管理的工具),可以看我这篇文章:GitBranching,结合图片会更清晰的明白HEAD是啥。
为什么会这样?很明显,因为你直接git pull,Github上你刚刚创的项目是空的,啥也没有,也就是没有初始的版本。如果你选了REDEME后gitignore是会有的,上面已经提到过了。
在这里插入图片描述
2)直接拉一个完整的项目,它是可以拉下来的,只不过目录不太对。
在这里插入图片描述
3)对比

clonepull
clone是将整个工程复制下来,所以不需要本地是仓库(即没有.git文件夹)pull需要先初始化本地文件夹作为一个仓库
clone出的项目可以自由切换远端已有的分支pull只能在当前分支

所以说git pull也能拉项目不过不方便。


下面正式开始说拉去远程项目的合理方式。

  1. 首先建议在“Project from Version Control”里使用IDEA提供的快捷clone方式。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    不这样的话,如过你在terminal里输入git clone,你的项目就会像这样clone下来,而且你本地没有git,下面第二张图,还得git init。不过你init后,它会默认把Github上的文件add和commit了,本身没有的,而你本地有的都是红色,这样省的配置.gitignore了(直接用IDEA也是这样的)。
    在这里插入图片描述
    在这里插入图片描述
  2. 之后就可以开发代码了,开发完还是那一套add,commit,push。不过要注意的是,一般团队开发,你拉下来代码后,你应该在git branch xx,并且git checkout xx,在这个分支开发,开发完commit到这个分支,push也是push到这个分支(直接git push http… xx就可以),由管理员进行合并操作(因为管理员要检查呀什么的,详情请看Gitflow理念)。
    下图push到了新分支new_branch,“Compare & pull request”就可以处理合并。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    两个分支,master还是原来的。如果合并了这个new_branch也并不会删除,需要手动删除。
    在这里插入图片描述
  3. 接下来试一下随便push一个分支(刚才是本地的new_branch push到远程的new branch)
    在这里插入图片描述
    看来名称与名称必须匹配。
  4. 我们在试一下,在push一个新建的分支,之前呢个compare & pull request变成什么样。出现了俩。
    在这里插入图片描述
    点这里的branch里也能合并(pull request),还能创建分支等。点tags可以创建tag,一般用来做发行版本。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  5. 下面我们看一下如何解决冲突。
    首先看git pull时的冲突。我们远程更改文件。
    在这里插入图片描述
    记得下面点commit
    在这里插入图片描述
    我们本地目前在new_branch2上,我们直接把master pull到new_branch2,然后本地处理冲突。
    在这里插入图片描述
    可以发现,这里说“Automatic merge failed;fix conflicts and then commit”
    在这里插入图片描述
    由冲突的文件是这样的。这里的结构是这样的。处理冲突只需要留下你想要的,并把多余字符删除掉即可。之后主要要git add 这个文件,因为你可以看到这个文件变红了,你需要重新add。
    <<<<<<< HEAD
    
    本地代码
    
    =======
    
    拉下来的代码
    
    >>>>>>>
    
    在这里插入图片描述
    你也可以用IDEA提供的可视化的方式,点击commit快捷键,然后点击“Resolve”
    在这里插入图片描述
    再点击“Merge”可以可视化的合并。
    在这里插入图片描述
    在这里插入图片描述
    目前把远程的master和本地的new_branch2合并了,在push到master,看看会不会有冲突。可以看到并不能push(可以强制,但不建议)。
    在这里插入图片描述
    那如果本地new_branch2到远程new_branch2,成功。上面也验证过,这回再次验证本地和远程的branch名字必须一样,才能push。
    在这里插入图片描述
    如果你想本地new_branch2 push到远程master,网络上的解决方式是使用git rebase,简单来讲就是重写git的“历史”,直接搜索“non-fast-forward”就可以知道相关词条。我这里就不解释了,因为我觉得你就不应该把本地new_branch2 push到远程master。正常的开发方式,简单来讲应该是你把远程的master拉到本地,然后你进行开发,开发完成后commit时,你应该new一个新的开发分支,commit到这个分支上;之后push到远程新的开发分支上,然后在Github上发起合并请求(开发分支到master),处理合并请求因该是管理员的事情。详情见Gitflow理念。
  6. 这里我在说一下,你可能会觉得我在本地处理了冲突,在push上去,管理员合并时也会有冲突呀。是的,管理员合并过程中可能也会发生冲突,需要管理员联系成员了解情况后进行手动合并。
    管理员的作用:
    1)检查各个成员分支的代码有无问题
    2)将成员分支的代码合并到master分支
    3)合并发生冲突时,进行手动合并
    总的来说,减少冲突的最好方式,就是口头约定好。

团队协作

由于自己只有一台电脑一个账户,日后工作有了经验在补充。

附录

1).gitignore的官方推荐(Java)(当然你可以自己加,比如这个并没有去掉.idea目录,和.iml文件)

# Compiled class file
*.class

# Log file
*.log

# BlueJ files
*.ctxt

# Mobile Tools for Java (J2ME)
.mtj.tmp/

# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar

# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
replay_pid*


# 可以加
*.iml
/.idea/

2)Git流程图
在这里插入图片描述
3)经常pull和push会报以下的错误,可以看这里:解决方式。简单概括原因就是,可能网不行,或者时SSL的问题,多试几次,要不换个网络。
在这里插入图片描述
在这里插入图片描述
3)SSH和HTTP的差别
简单来说,配置SSH后,你push代码时就不用输密码了;HTTP需要输入。
4)常用Git语句

1. git init:初始化,生成隐藏的.git目录(Mac下看不到,我记得Windows可以看到,可以使用ls -a查看隐藏目录)
2. git status:查看一些基本的信息
3. git add:添加到暂存区,这样你就可以选择性的提交,把add的提交
4. git rm --cached xxx:删除暂存区的文件
5. git commit -m "xxx":提交
6. git reflog:查看当前的版本,git log可以更详细
7. git reset --hard xxx版本号:穿越版本,本地文件将会改变
8. git branch -v:查看当前分支(不加-v,显示的信息少一些)
9. git branch xxx:创建分支
10. git merge  xxx:什么时候会冲突 :首先只有commit后才能merge,两个merge的都改了同一个地方,才会冲突,不然不会。只会修改你所处的branch,呢个不会变动
11. clone就是本地仓库没有,完整的把项目下载下来,pull就是和你以前push的版本进行合并
12. git remote -v:查看远程仓库别名
13. git remote add xxx httpxxx:设置别名(先在github上创个仓库,然后在去IDEA关联)
14. git push 别名 分支名(你的):传到github
15. git pull HTTP 分支名(Github上的):拉取
16. git clone HTTP
17. git branch --delete release-1.0.0:删除分支
18. git rm xxx:删除git上的文件
19. git rm -f xxx:删除git上的文件夹

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/22632.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

12V铅酸电池充放电保护板

现有铅酸电池特性&#xff1a; 重量&#xff1a;3斤电压范围&#xff1a;13.5~13.8V 14.4V~14.7V最大输出电流&#xff1a;2.16A 选用芯片&#xff1a;CN3768&#xff0c;4A&#xff0c;12V铅酸电池充放电管理集成电路 概述 CN3768是PWM降压模式12V铅酸电池充电管理集成…

关于python函数,你该了解这些

目录 1.创建一个函数 举例 2.调用函数 形参 实参 位置参数 关键字参数 可变长参数 其他 变量的作用域 全局变量 局部变量 3.匿名函数 1.创建一个函数 语法格式 def functionname([parameterlist]):[functionbody] functionname:函数名称&#xff0c;在调用函数时…

[附源码]java毕业设计闲置物品线上交易系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

web课程设计使用html+css+javascript+jquery技术制作个人介绍6页

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

追踪这9大关键DTC指标,将帮助你建立势头并释放增长

由于新冠疫情与检疫要求迫使品牌在分销产品的方式上进行创新&#xff0c;许多品牌转向了DTC模式。现在&#xff0c;DTC模式的吸引力越来越强&#xff0c;竞争也越来越激烈。在激烈的竞争中&#xff0c;犯一点小错误都可能贻害无穷。企业必须站在市场最前端&#xff0c;并专注自…

ts泛型,映射,条件类型和类型提取infer和一些常用工具库的说明

Typescript当中的T,K,V到底是个啥 有时候,我们看到下面的代码,当然,这里是简单例子来说 function identity <T> (value:T) : T {return value; }其实泛型就是使用字母来代替将要接收的类型,这里的"T"是代表类型的缩写,表示对将要接收类型的一个占位符,占位符…

【k8s】4、资源管理命令-陈述式

文章目录一、资源管理介绍1、资源管理概念1、资源管理方式二、 陈述式对象管理1、基本概念2、基础命令使用3、基本信息查看&#xff08;kubectl get&#xff09;4、增删等操作5、登录pod中的容器6、扩容缩容pod控制器的pod7、标签操作&#xff08;labels&#xff09;8、简单案例…

5G无线技术基础自学系列 | 5G信道结构

素材来源&#xff1a;《5G无线网络规划与优化》 一边学习一边整理内容&#xff0c;并与大家分享&#xff0c;侵权即删&#xff0c;谢谢支持&#xff01; 附上汇总贴&#xff1a;5G无线技术基础自学系列 | 汇总_COCOgsta的博客-CSDN博客 5G的信道包括逻辑信道、传输信道、物理…

jdk线程池ThreadPoolExecutor优雅停止原理解析(自己动手实现线程池)(二)

ThreadPoolExecutor优雅停止源码分析(自己动手实现线程池v2版本) ThreadPoolExecutor为了实现优雅停止功能&#xff0c;为线程池设置了一个状态属性&#xff0c;其共有5种情况。 在第一篇博客中曾介绍过&#xff0c;AtomicInteger类型的变量ctl同时维护了两个业务属性当前活跃…

SpringBoot SpringBoot 开发实用篇 5 整合第三方技术 5.8 变更缓存供应商 memcached

SpringBoot 【黑马程序员SpringBoot2全套视频教程&#xff0c;springboot零基础到项目实战&#xff08;spring boot2完整版&#xff09;】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇5 整合第三方技术5.8 变更缓存供应商 memcached5.8.1 memcached 缓存…

如何在 Navicat 16 中仅备份数据库结构 | 数据传输

尽管有少数据库管理员&#xff08;DBA&#xff09;不相信执行定期数据库备份是有用的&#xff0c;但对于如何最好地执行此操作有很多意见。无论你采用哪种方法&#xff0c;都有很多充分的理由保留数据库模式的副本。当发生数据丢失时&#xff0c;你可以从模式中还原数据库结构&…

[附源码]SSM计算机毕业设计二手车交易系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Java中的final和常量以及枚举

Java中的final和常量以及枚举final的作用常量常量概述和基本作用常量做信息标志和分类枚举枚举的概念定义枚举类的格式枚举的特征final的作用 1.final关键字是最终的意思&#xff0c;可以修饰&#xff08;类、方法、变量&#xff09; 2.修饰类&#xff1a;表明该类是最终类&am…

数据结构之:链表

链表初体验之单链表 线性表 线性表"线性存储结构" —— 一根线能串起来的数组 存储到物理空间之中 数据需要有相同的数据类型 元素之间的关系 需要是“一对一” 两种存储方式“顺序” 和“链式”链表介绍 分为有头节点的链表和没有头节点的链表。 插入的时候&#xf…

化合物在高通量筛选中的作用

在 1985 年之前&#xff0c;先导物的筛选主要是通过人工进行的&#xff0c;每周处理的样本数量不过几百个&#xff0c;组合化学的出现使得科学家们获取化合物的方式发生了显著变化&#xff0c;他们可以在短时间内合成大量化合物。更重要的是&#xff0c;随着分子生物学和功能基…

【构建ML驱动的应用程序】第 1 章 :从产品目标到 ML 框架

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

SpringBoot框架详细教学保姆级说明

目录 文章目录1.1 简介1.2 特性1.3 四大核心2 springboot入门案例2.1 SpringBoot 项目开发步骤2.2 创建一个 Spring MVC 的 Spring BootController2.3 分析2.4 核心配置文件格式2.5 Spring Boot 前端使用 JSP3 SpringBoot框架Web开发3.1 Spring Boot 集成 MyBatis3.2 DAO 的其它…

D. Make It Round(math)

Problem - D - Codeforces 在Berlandia发生了通货膨胀&#xff0c;所以商店需要改变商品的价格。 商品n的当前价格已经给出。允许将该商品的价格提高k倍&#xff0c;1≤k≤m&#xff0c;k为整数。输出商品的最圆的可能的新价格。也就是在最后有最大数量的零的那个。 例如&…

开发工程师的面经

目录1. static关键字2. 多态是什么&#xff1f;3. ArrayList和LinkList的区别区别ArrayList的扩容机制4. Java是编译型还是解释型&#xff1f;5. 什么是编译&#xff1f;什么是解释&#xff1f;6. String str“abc” 和 String str new String(“abc”)的区别&#xff1f;7. i…

C\C++刷题ADY3

题目来源&#xff1a;力扣 1.第一题 203. 移除链表元素 - 力扣&#xff08;LeetCode&#xff09; 思路分析:&#xff08;不带哨兵位的头节点&#xff09; 每次去分析一个节点&#xff0c; 如果节点不是存的是6&#xff0c;就拿节点来尾插 如果节点存的不是6&#xff0c;就把节…