Git学习

Git 学习

1、初步认识 Git

Git 是一个 免费、开源的分布式版本控制系统,可以快速处理从小到大的项目。 ,跟分布式对应的还有一个 集中式版本控制系统

  • 易于学习
  • 占地面积小
  • 性能快
  • 有廉价的本地库
  • 有方便的暂存区域和多个工作流分支
版本控制

版本控制是能够记录文件内容变化,以便查询特定版本修改情况的系统。

最重要的是它能记录文件修改历史纪录,使得用户能看到版本变化,而且还能做到版本切换。就是把过去记录到的版本切换回去。

两者对比
  • 集中式版本控制工具能做到团队内的每个成员都知道她其成员的工作进度,缺点就是若果出现故障就整个团队进度都会被影响
  • 分布式版本控制工具中有一个版本控制中心【由企业组织提供】,每次修改版本都是一次把项目完整的备份到本地仓库,即使控制中心出现了故障,个人的电脑上也会有版本控制工具,只是不能在故障期间向控制中心提交代码。每个客户端都是完整的备份
Git 的工作机制

Git 有三个分区:

  • 工作区【创建项目时在磁盘上开辟出来的空间,写代码】 -> git add 暂存区【暂时存储】 -> git commit 本地库
  • 在工作区和暂存区的代码修改没有历史版本,但是如果代码提交到仓库后就会生成一个历史版本,无法删除
代码托管中心【远程库】

代码托管中心是基于网络服务器的远程代码库,一般称为远程库。

  • 局域网 -> GitLab
  • 国外 -> GitHub
  • 国内 -> Gitee

Git 的安装:

首先来到官网:https://git-scm.com/

  • 点击 Windows GUI -> Downloads -> 选择运行环境 Windows -> 选择版本 第一个的 64 bit,下载好了设置好安装目录,一路next,
  • 中间会有一步问你需不需要在环境变量中设置或者只在 GitBash 中使用 Git ,看不懂就next,愿意改的改个选项,没什么影响,
  • 还有一个就是设置 Git Bash 的文本编辑器,默认选的是Vim,愿意换的就换,个人习惯,
  • 还有就是主分支名称默认是 master ,还有一个自定义选项,愿意自定义就自定义
  • 还有一个是问你要不要让它自动使用LF【Linux的换行方式】替换CRLF【Windows的换行方式】,随便自己。
  • 最后finish。【要记住一点,能装就能删,弄不好连文件夹一起删再装呗】
  • 桌面右键就能出现 GitBash Here ,点击就能看见一个命令行窗口。当让还有一个 GitGUI Here,但是丑,没啥人用。

进入GitBash 输入 git --version 就会出现当前你安装的 Git 的版本信息。嫌字体小可以 CTRL滚轮拉大

2、Git 的命令

命令名称 作用
git config --global user.name 自定义的用户名 设置用户签名
git config --global user.email 自定义用户邮箱 设置用户邮箱
git init 初始化本地库
git status 查看本地库状态
git add 文件名 将文件添加到暂存区
git commit -m 日志信息文件名 提交到本地库
git reflog 查看历史记录
git reset --hard 版本号 版本穿梭

命令能通过 双击Tab 键补全

1、设置用户签名
  • git config --global user.name xxx用户名
  • git config --global user.email xxx邮箱
  • 输入 cat ~/.gitconfig 可以查看已经存在的Git配置,这个文件就在当前系统用户目录下的 .gitconfig 文件里记录着

设置用户名和邮箱只是为了确定当前操作者的身份,在每一个提交版本中都可以看见这个身份信息,确认提交是谁做的,git 不会去验证是否存在这个邮箱,如果不设置就在后面无法提交代码。这里设置的用户名邮箱跟github上登陆的没一点关系。

2、初始化本地库 git init
  • 先创建一个空目录【要提前规划好目录】,然后新打开一个 GitBash 窗口,这样git就创建在那个目录里面了。

  • 输入 git init ,就会提示你当前已经在这个目录下创建了一个空的仓库 当前目录下的 .git 目录,但是这个目录默认隐藏看不见,可以这么做

    Git学习_第1张图片

  • 或者在 GitBash 窗口中使用 linux 命令 ll -a 查看当前目录下所有文件,就能看见 .git 文件夹,也可以 cd /.git 进入目录, 然后 ll 查看目录内的文件。但是看就行了别它而且也能发现Linux 中的命令都能在git里面用,他俩都是一个爹做的

3、查看本地仓库状态 git status
  • 输入 git status 后,会返回一些信息,第一次空的目录里面,有三行内容,第一行是说当前在哪个分支里面,第二行说有没有提交记录,第三行是说目录里面有没有产生文件记录,空的就是没有
  • 然后就能使用 Linux 命令创建一个新的文件 vim hello.txt ,然后在里面写点东西多复制【退出编辑并yy 复制 p粘贴】几行。:wq 退出
  • 然后再输入 git status 就会发现他最后一行就提示你出现了未追踪的文件后面是刚才创建的那个文件名不过冒红【当前文件在工作区】,这个时候他就提示你通过 git add 命令提交文件至暂存区
  • 通过 git add hello.txt 把文件添加到暂存区后,会提示你说【这里是一个警告,狗屁用没有】会用 LF 替换 CRLF 【在安装的时候软件问过】,还会提示你这个文件已经存在工作目录了,再输入 git status 就会出现一个提示说已经在监控这个文件了,而且在 暂存区的文件可以被删除,所以他就提示你用 git rm --cached 文件名 能把这个文件删除了。当然只是在暂存区删除,工作区的文件还存在。
  • 输入 git rm --cached hello.txtgit statusgit add hello.txt 多体验一下变化
4、将暂存区文件提交本地库 git commit -m “日志信息” 文件名
  • 首先 git conmmit -m "first commit" hello.txt 提交本地库。就会返回一些日志报文

    • 通知你一下 CRLF 被替换成 LF 了
      warning: LF will be replaced by CRLF in test.txt.
      这个文件在你的工作目录存在了
      The file will have its original line endings in your working directory
      主分支提交了一个文件,7位字符编码就是提交文件的版本号,后面跟著提交时写的日志信息
      [master (root-commit) 0b1dd9b] first submit
      一个文件变化,十行记录插入
       1 file changed, 10 insertions(+)
       创建了一个多少字节的文件
       create mode 100644 test.txt
      
  • 然后再输入 git status 就会看见一直提示你的没有提交的信息消失了代替的是

    • nothing to commit, working tree clean 说你的工作树是干净的,没东西需要提交了
  • 可以通过 git reflog 查看引用日志信息

    • 0b1dd9b (HEAD -> master) HEAD@{0}: commit (initial): first submit
      这就是之前提交的那个记录的版本号,指针指向 master 分支,最后那个就是第一次提交的版本信息
      
  • 也可以通过 git log 查看详细日志信息

    • 提交的内容的完整版本号,前面那个只是截取了前七位
      commit 0b1dd9b55219863527d66218e7066d94f059a020 (HEAD -> master)
      之前起的用户名和邮箱,还有就是时间日期、提交时的日志信息 
      Author: xyk 
      Date:   Wed Mar 9 10:04:07 2022 +0800
      
          first submit
      
5、修改文件
  • 先对 hello.txt 文件进行编辑修改 vim hello.txt 随便做点修改

    • 再输入 git status 查看本地仓库状态就会出现一个冒红,说是出现了不受控制的修改,是因为只是在工作区修改了,没有提交到暂存区。你可以通过提交命令或者回撤命令 git restore 放弃修改

    • git add 提交一下,然后再查看状态 git status ,会提示你有提交变换,可以通过撤回命令 git restore 放弃提交的修改

    • git commit -m "日志信息" 文件名 提交至本地仓库,

      • warning: LF will be replaced by CRLF in test.txt.
        The file will have its original line endings in your working directory
        生成了另一个文件版本号和日志信息
        [master 7d03c47] second commit
        git无法表达修改,所以他会把被修改的那一行删除,把修改的那一行插入。就有一行插入,一行删除的记录
         1 file changed, 1 insertion(+), 1 deletion(-)
        
    • git reflog 查看版本

      • 可以看见指针指向当前版本,第二次提交
        7d03c47 (HEAD -> master) HEAD@{0}: commit: second commit
        0b1dd9b HEAD@{1}: commit (initial): first submit
        
  • git 版本管理是通过 指针 管理,不通过文件副本的方式,所以工作目录中只有一个文件。

6、历史版本切换问题
  • 版本穿梭

    • git reflog 查出文件历史修改信息

    • 使用 git reset --hard 版本号 将版本切换成你想切换回去的版本

    • git reflog 再次查看历史修改信息

    • $ git reflog
      先是指针指向 7d03c47 这个版本号的修改
      7d03c47 (HEAD -> master) HEAD@{0}: commit: second commit
      0b1dd9b HEAD@{1}: commit (initial): first submit
      
      xyk@xyk MINGW64 /d/git/Git-Space/git-demo (master)
      $ git reset --hard 0b1dd9b
      修改后告诉你 版本号已经指向了 0b1dd9b 
      HEAD is now at 0b1dd9b first submit
      
      xyk@xyk MINGW64 /d/git/Git-Space/git-demo (master)
      $ git reflog
      再次查看就能看见指针已经指向了 0b1dd9b 版本,git还会提示你 指针移动至 0b1dd9b 版本
      0b1dd9b (HEAD -> master) HEAD@{0}: reset: moving to 0b1dd9b
      7d03c47 HEAD@{1}: commit: second commit
      0b1dd9b (HEAD -> master) HEAD@{2}: commit (initial): first submit
      
      
    • 进入 .git 目录,HEAD 文件就是记录着当前工作在哪一个分支

      • refs -> heads ,里面的 master 文件记录着当前的版本号,如果你做出了版本切换这个版本号也会跟着改变,当前的版本号是:0b1dd9b55219863527d66218e7066d94f059a020 ,前七位就是刚才切换的版本号
    • 同时外面的文件 hello.txt 也会回到之前未修改的内容

    • Git的版本穿梭其实就是控制指针HEAD,选定分支,再控制指向版本号。只是分支指向版本的指针变化,指向那个那个版本就变

3、Git 的分支

分支就是,在版本控制过程中,同时推进多个任务,为每个任务就能创建任务的单独分支。使用分支就意味着把自己的开发工作从主线中分离出来,不会影响主线的功能,在有需要的时候将分支的代码提交给主线进行主线程序的版本迭代。分支可以理解为程序的副本,你只是在操作副本进行功能添加修改等操作。实际上也是通过指针实现的。

1、分支的特性

Git学习_第2张图片

  • 在主分支上,发布的程序一开始在运行着
    • 但是有一天出现了一个需求,需要加一个蓝色的背景和添加一个小游戏
    • 就能让员工从主分支上拉取一份代码,一个负责做背景,一个负责做游戏,主分支照样跑
    • 背景做好了,测试没问题了,就跟主分支合并发布主分支版本1.0.1
    • 主分支程序跑着跑着出现了问题,就拉一份代码下来,去紧急处理区做处理
      • 然后把做好的没有异常的跟住分支提交,更新,分布版本1.1.0
    • 到后面了,游戏分支也做好了,测试好了,就再跟主分支提交合并,发布大更新版本2.0.0
命令 作用
git branch 分支名 创建分支
git branch -v 查看分支
git checkout 分支名 切换分支
git merge 分支名 把指定的分支合并到当前分支上
2、分支的创建 git branch xx
3、分支的转换 git branch xx
  • 首先 git branch hot-fix 创建一个热修复分支,会没有什么提示

  • git branch -v 查看所有分支,就会看见两个分支

  • git checkout hot-fix 切换到 hot-fix 分支上

    • 在热修复分支上修改 hello.txt 文件,并查看 git status

      当前分支是 hot-fix
      On branch hot-fix
      发现了不受监控的修改
      Changes not staged for commit:
        (use "git add ..." to update what will be committed)
        (use "git restore ..." to discard changes in working directory)
              modified:   test.txt
      
    • git add hello.txt 添加到当前分支的暂存区

    • git commit hello.txt -m "hot-fix first commit" hello.txt 提交到 hot-fix 分支仓库,会生成一个版本号,再 git status

      分支名、版本号、提交时的版本信息
      [hot-fix d518204] hot-fix first commit
      我做了两行修改,就有两行插入、两行删除
       1 file changed, 2 insertions(+), 2 deletions(-)
      
    • 再去文件夹中看 hello.txt 内容变了,HEAD 文件内容也变了,refs->heders 里面多了一个文件hot-fix,文件内容是修改后的文件的版本号

    • 在 hot-fix 分支上 cat hello.txt ,再切换到master分支上

  • 在master分支上 cat hello.txt 是不一样的。一个是已经修改提交过的版本,一个是之前的那个版本

4、分支的合并 git merge 分支名
  • 这个命令使用时,是把命令里面的分支内文件修改内容合并到当前所在的分支的文件中,分支不会消失

  • 切换回master分支

    • 使用命令 git merge 分支名 把hot-fix分支合并到master分支上

      正在用hot-fix的文件提交结果代替主分支上的文件提交结果,后面代替前面
      Updating 0b1dd9b..d518204
      修改的文件名,修改的总记录数,两行删除两行插入
      Fast-forward
       test.txt | 4 ++--
       1 file changed, 2 insertions(+), 2 deletions(-)
      
      
    • cat hello.txt 就会发现内容变成了在 hot-fix 分支上修改提交的结果

这是正常合并

5、解决代码合并冲突问题

产生分支的原因:存在两个分支对于同一个文件做了两个不同的修改方案,工具无法替我们决定使用哪一种修改的时候就由人为确定使用哪一个版本的修改。

  • 首先在主分支上修改 hello.txt 文件,然后 git add hello.txtgit commit -m "master commit" hello.txt

  • 切换分支 git checkout hot-fix ,再同样对 hello.txt 文件修改,之后,再 git add hello.txtgit commit -m "hot-fix commit" hello.txt

  • 切换到 master 分支 git checkout master ,进行分支合并 git merge hotfix 就会出现错误

    • CONFLICT (content): Merge conflict in test.txt
      Automatic merge failed; fix conflicts and then commit the result.
      说是合并内容冲突,不能合并
      

      而且工作空间后面会出现 (master|MERGING) 分支名和正在合并,表示分支合并还没做好。

      而且 git status 会发现

      说你有未融合的分支
      You have unmerged paths.
      在提交时出现问题
        (fix conflicts and run "git commit")
        使用 git merge --abort 命令停下合并
        (use "git merge --abort" to abort the merge)
      未合并的分支的原因是因为 都修改了 test.txt
      Unmerged paths:
        (use "git add ..." to mark resolution)
              both modified:   test.txt
      
      no changes added to commit (use "git add" and/or "git commit -a")
      
      
    • 这时 cat hello.txt 会发现

      <<<<<<< HEAD
      hello
      hello  heihei
      =======
      hello  haha
      hello
      >>>>>>> hot-fix
      <<<<到=====里面的是当前分支做的修改提交,=====到>>>里面是hot-fix分支做的提交
      
    • 那么就能 直接手动修改文件内容,自己决定要留那一部分,vim hello.txt ,把多余的符号删了,就像修改文本一样,留下想要的修改,然后 Esc -> :wq

    • 然后 git add hello.txtgit commit "merge commit" hello.txt .完成手动合并提交

    • 其实就是git把你两次的修改给你放那里,你愿意怎么改就改不改也行,也能提交,改了就算是合并了,手动提交,也是提交

    • 但是呢,他会报错说是 fatal: cannot do a partial commit during a merge. 不能在合并期间提交,所以需要需改一下提交的命令 git coomit -m "merge commit" 后面不跟文件名,就能成

  • 然后就合并好了

6、Git 的团队协作机制

Git是一个分布式的版本控制系统

  • 首先一个团队产出了一个程序,并把程序发布在远程服务器上
    • 有团队内部人员和被团队认可的人员可以对这个程序代码拉取【clone】至本地做版本控制和功能开发
    • 功能做好了后,这些人把代码版本提交到本地库,再提交【Push】到远程版本控制中心。
  • 但是经过这些努力功能还是不能达到预期效果,那么就需要把远程版本控制中心的文件作为一个分支交给【fork】别人
    • 其他的团队先把代码拉取【clone】到本地,然后做功能开发,做好了后,做好本地版本控制,然后提交代码到他们团队的远程版本控制中心
    • 然后再把文件提交【Pull request】给程序原本的开发团队
  • 原来的开发团队接受到其他团队的推送请求,先是 审核 ,等到确定功能达到要求,才会 merge 到自己团队的远程控制中心
    • 等合并好了,本团队的人就能拉取【clone】代码,到本地做版本控制。

其实版本控制都是在本地做,功能开发也是在本地

4、IDEA 集成 Git

1、配置忽略文件

在使用版本控制系统控制实际程序工作时,这个实际项目不仅有实现功能的文件,还有一些多余的编辑开发软件的标识后缀【比如是xxx.iml】文件,而又不想-管这种文件,就能通过这个文件的内容设置忽略管理项目文件中指定后缀的文件,不管这些 ,忽略掉的好处就是能够屏蔽掉IDE开发工具的差异化。

  1. 首先需要在[原则上说是在那里创建都行]用户->用户名,目录下面创建一个名字叫 xxxxx.ignore【建议名字记就叫 git.ignore

  2. 文件内容

    # 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*
    .classpath
    .project
    .settings
    target
    .idea
    *.iml
    
    
  3. 接下来在 .gitconfig 文件中添加如下配置

    [core]
    excludesfile = C:xxx/git.ignore 文件的路径
    注意:这里要使用“正斜线(/)”,不要使用“反斜线(\)”
    
2、IDEA 寻址 git.exe

做完了上面的步骤后,打开 IDEA ,来到 settings -> version control -> Git,配置 Path to Git ,找到git安装目录下的 bin->里面的 git.exe,选中然后一路确定

3、使用IDEA操作Git

配置好了上面的,右键随便一个文件,但是看不见 git 有关的选项。

  1. 首先,点击上面导航栏的 VCS->create git repository ,默认选定的是当前项目目录。
  2. 然后就能在下面一栏看见有关git的图标和箭头,而且文件名和后缀都变红了。
    • git 里面文件名冒红,就是说你的文件没有添加到暂存区,就他没监控到你的文件,就冒红,之前忽略的后缀名文件的名字都是灰的
    • 然后就能右键文件夹会出现一个git选项,里面最上面的 Add 选项就是对这个项目进行 git add ,添加到暂存区
    • 点击后就能看见文件名字都变绿了,这个就是提交到暂存区了,在命令窗口也能通过 git status ,查看当前路径下文件状态,提交暂存区文件名就会变绿
    • 此时再去右键项目 Git->commit file【ctrl+K】,会弹出一个窗口里面是变化的文件和变动记录,确定无误后,填写 commit message ,然后提交至仓库。之后文件名就变成之前的颜色了
    • 这样就说明当前仓库处于clean 状态
4、IDEA中的版本穿梭

在对 IDEA 文件做了修改后,文件名会变成蓝色,这代表当前文件曾经被git追踪过版本。对这样的文件可以直接提交版本,也可以先提交暂存区,再说要不要提交的事情,毕竟,提交后版本就不能删除了。暂存区的还能后悔拿后面的覆盖掉

  1. 先对随便一个 文件做一点修改,提交一次,在修改,在提交一次。多来几次好看效果

    • 提交的时候,提交窗口能看见两次版本更迭时的文件具体变化,以及上一次的版本号,等信息,留心观察
  2. 然后想要把进行版本穿梭就直接看底下那一栏,有一个 Git 选项【也可能是version control,IDEA版本不一样】 ,然后点这个选 Log 选项

    Git学习_第3张图片

    • 里面有提交时的版本信息还有一个黄标代表指针,指针指向的版本是当前提交的版本
  3. 想要切换版本,就把想切换的版本右键 checkout 版本号【可能会有两个选项】,然后就能看见代码变成提交这个版本的内容了,而且指针指向了这个版本

5、创建分支、分支切换
  1. 创建方式有两种:
    1. 右键项目 Git->Branches,点击new branche,就能创建分支,窗口默认会选定你创建完成后切换到创建的分支上,你也可以不勾
    2. 直接IDEA右下角,点击那个git版本号【或者是 git:master,版本不一样】,一样有创建分支的窗口。后面操作一样
  2. 建好分治后就能在版本控制那个窗口看见多了一个分支,要切换就点那个右下角,点你想切换回去的分支,然后checkout,就能切换回去
6、分支合并
  1. 正常合并,一个分支做了改变,然后合并到主分支上
    • 切换到创建好的分支上,对文件修改,然后提交,可以明显地看见下面的版本控制界面出现了分支提交的版本日志,并且指针图标指在了修改分支的文件版本上
    • 然后切换到master分支,打开右下角窗口,点要合并的分支,有一个 merge into current 合并。
    • 就能看见文件内容变了
  2. 出现合并冲突,多个分支对文件都做了修改,而且分支需要合并
    • 先做好两个分支对同一个文件修改提交后,切换分支,打开窗口,选分支,点合并
    • 能看见底下的版本控制界面里面,有两个分支都提交了一份修改
    • 出现一个窗口提示出现冲突,就需要点击 merge 选项,IDEA就会生成三个窗口,两边是分支提交的修改内容,中间是没被修改前的文件,这两个分支窗口都有一个 箭头、叉号 标识
    • 如果要这部分提交的,就点击箭头,添加到结果中。不要就叉了
    • 然后文件就合并好了,底下的版本控制界面就又改变了

5、GitHub

git 官方的代码托管中心

远程仓库操作

命令名 作用
git remote -v 查看当前所有远程地址别名
git remote add 别名 远程仓库http地址 给远程仓库起别名
git push 别名【或者http地址】 分支 把本地分支的内容推送给远程仓库
git clone 远程地址 将远程仓库的内容克隆到本地
git pull 远程库别名 远程分支别名 将远程库对于分支的最新内容拉下来直接合并
1、创建远程库
  1. 首先去 https://github.com 里面注册一个账号,然后登录进去。
    1. 点击头像左边的加号 选第一个 new repository
    2. 然后进去填一个仓库的名称,建议跟本地项目名称一样,然后选择是否公开这个仓库
    3. 拉到最底下直接创建一个新仓库
    4. 之后就能看见创建好的仓库,复制你的仓库的 http 路径
2、代码推送 Push
  1. 打开本地git

    1. git remote -v 查看所有远程地址,结果是没有
    2. git remote add 别名 远程地址 把刚才创建的远程仓库地址添加进来
    3. 再次查看 git remote -v 所有远程地址,结果有两条,说这个远程仓库能push用也能pull和clone用
  2. git pull 别名或http地址 本地分支名 推送本地内容到github仓库中,这个过程受网络影响,多试几次

    1. 之后就会弹出一个窗口问你要登陆github,直接用浏览器打开

    2. 就会出现页面让你授权git凭证,点击 Authorize ,出现 Authorize successed就是成功授权了

      1. 我的还出现一个SSH用户名密码验证,验证好了才进行推送
    3. 然后这个页面就能关了,等待分支文件上传完成后,刷新页面,就能在远程仓库看见上传的项目了

      Enumerating objects: 15, done.
      Counting objects: 100% (15/15), done.
      Delta compression using up to 8 threads
      Compressing objects: 100% (10/10), done.
      Writing objects: 100% (15/15), 1.08 KiB | 91.00 KiB/s, done.
      Total 15 (delta 3), reused 0 (delta 0), pack-reused 0
      remote: Resolving deltas: 100% (3/3), done.
      To https://github.com/StringNameQinDie/git-demo.git
       * [new branch]      master -> master
      
      
3、代码拉取 Pull
  1. 先打开远程仓库

    1. 对提交上去的文件进行修改,点那个图形
    2. 修改好后,在底下填写提交日志信息
    3. 然后提交修改
  2. 在本地git上 git pull git-demo1[别名] master[分支名] 进行拉取

    remote: Enumerating objects: 5, done.
    remote: Counting objects: 100% (5/5), done.
    remote: Compressing objects: 100% (2/2), done.
    remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
    Unpacking objects: 100% (3/3), 660 bytes | 60.00 KiB/s, done.
    From https://github.com/StringNameQinDie/git-demo
     * branch            master     -> FETCH_HEAD
       d5d03e0..063b007  master     -> git-demo1/master
    Updating d5d03e0..063b007
    Fast-forward
     test.txt | 1 +
     1 file changed, 1 insertion(+)
    报文记录了文件修改数、修改记录
    
  3. 可以查看一下本地库状态,发现是干净的,说明拉取会直接自动帮你提交至本地库,查看文件是否被修改,那么文件已经修改了。要随时使本地库跟远程仓库的版本一样

4、代码克隆 Clone

第三方想要对远程仓库的内容进行 clone ,创建一个空目录模拟

  1. 在空目录里面 打开一个 GitBash ,

    1. 直接 git clone 远程仓库HTTP链接 ,直接就拉取好了
    2. 点击仓库名来到,仓库页面,点击code按钮,就能看见仓库http地址
    3. 而且初始化了当前的仓库
    4. 查看当前仓库的别名 git remote -v 会发现别名也被自定义好了
  2. 说明在进行克隆代码时不需要登陆,而且会自动初始化仓库,创建远程仓库的同样的目录结构,创建了.git文件夹,会自动创建别名

    $ git clone https://github.com/StringNameQinDie/git-demo.git
    Cloning into 'git-demo'...
    remote: Enumerating objects: 18, done.
    remote: Counting objects: 100% (18/18), done.
    remote: Compressing objects: 100% (9/9), done.
    remote: Total 18 (delta 4), reused 14 (delta 3), pack-reused 0
    Receiving objects: 100% (18/18), done.
    Resolving deltas: 100% (4/4), done.
    
    

    克隆的时候老实的右键粘贴,否则就会说 https 协议不支持咋的,不支持就重新输入命令复制粘贴

5、团队内协作

如果团队内的成员需要push分支去远程仓库,则需要这么操作【用两个账号模拟的】

  1. 做一些本地修改内容,并提交至本地仓库
  2. 先登录有仓库的那个账号,进入仓库,点击 Settings->collaborators[合作者]或者别的不行就翻译一下页面,像是组织合作者这种的就是 ,搜索团队成员的昵称,选定就能生成一个邀请函
  3. 然后添加好了后会生成一个邀请函地址,复制地址交给成员
  4. 再登陆另一个账号【另一个成员】,在站内浏览器导航栏粘贴并打开那个邀请函链接
  5. 就能看见邀请信息,同意之后就能共同操作邀请人的仓库
  6. 然后就能在本地添加远程仓库,提交分支,修改仓库文件
  7. 接下来 git push 远程仓库地址 分支名 将修改后的内容推送至团队仓库
  8. 在团队仓库中,有一个history记录着仓库的修改历史记录,点进去就能看见修改的内容和日志信息
6、跨团队协作

如果团队内部不能开发出来功能或者想向开源仓库提供帮助或者创意,就算是跨团队协作了,第三方既不是队友,也不是自己。怎么推送代码给你。

  1. 首先再创建一个号当第三方,登陆上去
  2. 这个空账号就是第三方,现在什么都没有,在搜索框里面 输入 仓库主人的昵称/仓库名 就能精准找到仓库,因为昵称是唯一的
  3. 找到仓库后,你需要把他仓库的东西 fork 叉一份到自己的仓库里面,所以就点右上角的 fork 按钮
  4. 就会创建一个仓库,进入仓库后,在仓库的名称路径下就能看见,写着 fork from 叉过来的仓库的地址
  5. 点击文件,进入在线编辑工具,做一个修改,写一个提交报文,点击提交
  6. 但是回头看自己的账号,就会发现仓库里面的文件没有变。第三方做的修改后,需要提交 pull request,由仓库主人审核后,再决定合并与否
  7. 创建 pull request
    1. 点击 pull request -> new pull request,就会生成一份请求报告
    2. 里面写着把自己的修改的分支提交到原仓库的哪个分支,点击 create pull request
    3. 弹出一份表单,就是叫你再修改一下提交日志信息,大的输入框是留言板。
    4. 再点击 create pull request,这个 pull request 就发出去了。发给原仓库主人
  8. 回到自己的账号上,就会在仓库里面看见 pull request 上面多了一个消息提示。
  9. 查看 pull request
    1. 点击进入 pull request,就能看见提交的日志信息和提交者的昵称
    2. 点击日志报文,进去后,就能看见留言板留的言和提交的内容
    3. 点击上面横幅的commits【或者直接点击留言板下面的日志信息】,就能看见第一次提交的报文信息,点进去里面就记载着提交时的报文和留言板的留言
    4. 如果你觉不错,回到conversion,底下有一个merge pull request ,合并拉取请求,或者里面还有合并到分支请求和重新分配分支请求定义分支信息,要不合并就别理他。
    5. 点击合并拉去请求后,再去查看,就能看见内容变成第三方修改的那一版
    6. 这个conversion 同时也是一个聊天室,你可以在里面和提交的作者聊天,两人都能看见
7、SSH 免密登录 GitHub

来到远程仓库界面,code 按钮的SSH 选项有警告不能用,说你的账号里面没有任何widows的SSH密钥,需要添加到帐号里。

  1. 首先,来到电脑的 用户->用户名 下的目录,在那里GitBash

  2. 然后 ssh-keygen -t rsa -C 描述内容 ,在这个目录下生成 .ssh 密钥目录,命令中 ssh-keygen 是生成ssh目录的命令,-t 是指使用哪种算法,rsa 是一种加密算法协议 ,-C 是一种描述符,后面跟的一般是用户名。

  3. 输入命令后,按三下回车,就加密好了。

  4. 查看当前目录,就能看见 .ssh 目录

  5. cd .ssh 进入目录,查看里面的内容,id_rsa 文件保存着私钥,id_rsa.pub 是公钥

  6. 在命令行中进入 .ssh 目录,cat id_rsa.pub 查看公钥内容,并复制

  7. 然后来到github头像->settings->SSH and GPG keys 里面,创建一个新的SSH公钥

  8. 起一个名称,然后把复制的公钥内容粘贴到下面的框子里。

  9. 确定后,出现

    Git学习_第4张图片

    就是成了

  10. 最后在本地仓库做一些修改提交后,通过仓库的 SSH 地址进行pull和push操作,测试是否成功

  11. pull 的时候问你要不要保存这个SSH连接,输入yes

  12. 如果中间出现了迷惑性问题就把命令再重新打一遍执行

6、IDEA 集成 GitHub

1、IDEA 绑定GitHub账号
  1. 首先来到IDEA的 settings -> version control -> github【新版本默认安装了这个插件,没有的话就去plugins里面下载一个重启IDEA】 里面,然后点击加号
    • 有两种登录GitHub方式
    • 新版的可以直接选择 logi n via GitHub 就会跳转网页认证,直接能认证绑定好。老版没有页面认定,光靠网络质量,可能一万次才能登上去
    • 还有一种是用token,选项 log in with token ,会出现一个叫你填写token的,然后来到GitHub,登录号账号,来到 https://github.com/settings/tokens 里面,生成一个token,
      • 进去先是给 token 取一个名字,然后勾权限,选择token的有效期,有永久有效的,最后直接生成
      • 然后直接复制粘贴到IDEA里面。生成token的页面不能刷新,一刷新就看不见token了,就要再创建一个新的token
  2. 这样就算是绑定好了
2、IDEA 分享项目到GitHub
  • 在绑定好账号后,想操作内容,先要把项目部署到上面。
  • 按理说要先创建一个仓库,但是IDEA提供的GitHub插件可以直接分享项目到远程库,自动创建仓库,免去这个步骤
  • 来到IDEA导航栏原来vsc现在是Git里面,GitHub -> share project on GitHub 点击后,先问你是不是要提交到刚才绑定的账号中
  • 出现一个窗口,一个是仓库名【可以选public(默认)还是private】,建议跟项目名一样,一个是别名,一个是描述【可以不写】。
  • 直接分享,IDEA中出现successfully,就是成了。可以去GitHub刷新查看就多了一个仓库
3、IDEA push项目到GitHub

在绑定好GitHub账号后,先对程序内容做一点修改,然后提交本地仓库,可以进行push操作,push 工程去远程仓库可以

  • 右键项目 -> Git -> push
  • CTRL + shift + K
  • 在最上面的工具栏里面,原来的vsc在IDEA绑定Git后变成了Git,点这个直接也能看见push
  • 右上角也有一个git图形操作按钮,选 右上角箭头按钮,就也能push

但是在push项目时,默认是使用的https协议,比较慢,既然开通了 SSH免密登录 协议,就能先去 仓库路径下复制SSH路径,在push界面点击push的 define remote ,定义一个新的路径,自己随便取一个名字,然后把复制来的路径粘过去,选定自己创建的ssh方式的push方式,然后push。IDEA出现everythingupdate就是好了,可以去GitHub刷新查看

中间出了一个小问题,就是忘了这个账号没有ssh密钥,第一次失败了。然后就先去 user->用户名->.ssh目录下gitbash【ssh-keygen -t rsa -C 描述内容,问你要不要重写,输入y,然后cat那个ras.pub,复制】创建一个ssh密钥,然后再去账号里面new一个sshkey,把密钥内容复制过来。然后再去IDEA里面新创建一个push用的ssh链接,拿这个就能成功。如果要管理之前的没用的链接,去idea最上面的Git->manage remotes 里面就能看见之前创建的全部连接,没用的删了

4、IDEA pull 拉取GitHub仓库内容

警告:一般情况下,要保证本地版本比远程仓库版本高,如果不能保证就先pull远程仓库的版本,在升级后再push到远程仓库,否则push操作会被拒绝。就是说push版本要比远程仓库高,如果不确定就先pull

还有就是pull的时候别改动本地代码还提交了,那样就会面临代码合并问题,要自己手动合并。不修改是IDEA帮你自动合并

pull操作就是自己去GitHub里面在线编辑一个随便多一点什么出来,保存一下。然后IDEApull【要么就是右键git->pull,要么就顶部导航git->pull】,pull的时候默认选的是从刚才的ssh路径的master分支,如果不是自己改一下。pull好了后就能看见文件内容变了,日志也输出了。

5、IDEA clone GitHub远程库

如果现在是别的电脑,或者自己电脑把这个项目文件夹删掉。打开IDEA默认会打开上次打开的文件,因为删了就打不开了,会出现一个让你选一个的界面,有一个按钮 Get from VCS ,点这个,再点 GitHub ,里面就有你绑定账号的仓库,你选你想clone的那个项目,底下会自己给你生成项目在磁盘路径,然后clone,就又能把项目clone到电脑上了。【或者你随便打开一个项目,再点右键或者最上面的导航栏Git->clone,选你想clone的仓库,一样的】,可能会因为网不行,出点问题,多来几次。我来了4次

6、删除仓库

来到想删除的仓库,点击settings,往下翻,一直到最下面就有一个deletexxxx 的选项,你点他就叫你输入仓库路径确认你输入后,确定就能删除了

7、Gitee 码云

gitee是一个基于 Git 的开源分布式版本控制平台,他的服务器在国内,速度快,用的方法跟GitHub差不多,而且还是中文的

官网地址:https://gitee,com

首先注册一个gitee账号,建议用邮箱,爱绑定手机号就绑定,也能不用绑定

1、码云创建远程库

创建好账号后,登陆进去会来到个人页面

  • 创建仓库就点击右上角加号->新建仓库,接下来就跟GitHub操作差不多
  • 设置仓库名、仓库路径、爱填不填的仓库介绍,他这里的仓库是否公开默认是私有的,公开要自己创建后去设置里改
  • 而且还能设置仓库初始化、分支名、模板。提前设置一步到位
  • 点确定就能创建好了
2、IDEA 中集成 Gitee

GitHub 可以在IDEA中操作是通过插件,那么gitee也有对应的插件

  • 来到 IDEA->settings->plugins 搜索gitee,下载重启IDEA【新版的直接点apply后,再去version control,就能看见变化】
  • 在来到settings->version control ,就能看见 Gitee 这个选项
  • 点进来,绑定账号【用邮箱登录】,跟绑定GitHub账号差不多,速度还快,手续还少
  • 绑定好就好了,ok
3、IDEA 中分享项目到gitee

如果你懒得建gitee仓库,可以直接通过IDEA gitee 插件做到往GitHub分享项目一样的事

  • 点击最上面的导航那一栏原来是vcs现在是Git的选项,里面就能看见多了一个gitee选项,点他就有一个 share project on gitee
  • 点击后,设置一下仓库名、别名、项目描述后,直接 share
  • 再去 gitee 查看就什么都有了
4、IDEA 中push项目到gitee

如果你想先在gitee里面创建一个仓库,后把你的项目push到这个仓库中

  • 首先去创建一个新的空的 gitee 仓库,然后来到IDEA
  • 要么右键或者最上面导航栏的 Git 选择 Git->push 或者 右上角箭头 push,或者CTRL+shift+k
  • 然后新创建一个 defined remote 设置提交路径为你新创建的那个仓库的 https 地址【https也快,要用ssh自己去设置ssh密钥】,然后push
  • 再去看就好了
5、IDEA 中pull项目到gitee

在仓库里面把项目在线编辑一下,gitee在线编辑的时候会自动补上提交日志,你不满意能删了自己写,然后保存

  • 在IDEA中pull,要么 CTRL+T【先别用这个,这个默认路径没修改,修改后再用这个】,要么右键要么顶层导航原来vcs的位置现在是Git里面 git->pull
  • 选择好pull的路径,就是刚才添加的那个gitee仓库的https路径
  • 然后pull,本地代码就变了

注意:gitee push的时候,一样要本地版本比远程仓库版本要高,不然就会被拒绝push,工作的时候不能确定版本时先拉取远程仓库的,再在本地修改、提交本地仓库、push远程仓库。

而且pull的时候本地代码尽量别动,否还会面临合并失败手动合并的问题,一般是IDEA自动合并,都改了IDEA就不知道选哪个修改的,抛弃那个

6、IDEA 中clone项目到gitee
  • 先把本地项目文件夹删了
  • 然后在打开界面,选 get from vcs,有与你绑定了gitee账号,就多了一个gitee选项,选这个
  • 然后选你这个gitee里面想clone 的仓库,文件夹路径IDEA帮你写好了,不满意自己改
  • 然后下载,会自动打开

这个速度很快

7、Gitee 连接 GitHub 进行代码的复制和迁移

如果有GitHub的仓库需要使用但是操作又不方便,gitee就能直接把GitHub的整个仓库搬过来

  • 先进入gitee的创建仓库界面,会有一个导入其他网站已存在的仓库,选这个
  • 一种是通过仓库url导入,能导入你的,也能导入别人的
  • 一种直接是绑定GitHub账号,然后导入,他还会检测在gitee平台有没有这个公开项目,有的话他会推荐你用这个路径导入
  • 先试试url的
    • 进入GitHub想导入的仓库,点击code
    • 选择https协议路径,复制
    • 来到gitee粘贴路径,剩下的会被自动补全,自己不满意自己改
    • 然后导入
8、GitHub 项目更新gitee的版本跟随
  • 你现在GitHub里面之前导入进来的那个仓库中做一点修改,提交后。
  • 来到gitee,来到导入的那个仓库,点仓库名字后面的那个刷新图标,就能直接强行自动同步
  • 如果远程仓库真的更新了,就会出现绿框提示
  • 如果之前导入的是别人的项目,就直接去gitee刷新一下,就能跟他的GitHub版本一样
9、gitee 删库
  • 来到你想删除的那个仓库,点击管理
  • 里面的左边仓库设置里面有一个删除选项
  • 删除的时候叫你输入确定信息跟自己的密码确定删除。然后就删除了

你可能感兴趣的:(git,git,github,intellij-idea)