目录

什么是版本控制

常见的版本控制工具

版本控制分类

Git与SVN的主要区别

软件下载

启动Git

常用的Linux命令

Git配置

设置/修改用户名与邮箱(用户标识,必要)

Git的工作区域:

git基本命令:

Git文件的四种状态:

仓库的搭建:

删除操作:

什么是分支:

合并冲突:

解决冲突:

Git团队协作:

Git连接Github:

创建Github仓库:

远程仓库操作

推送至远程仓库:

拉取远程库:

克隆远程库:

clone 和 pull 的区别:

团队内协作:

团队外协作:

SSH 免密登录

忽略文件:

公钥绑定(push免密码):

IDEA中集成Git:

1、定位Git程序:

 2、初始化本地库:

4、切换提交版本: 

5、创建分支:

6、切换分支:

8、有冲突合并分支:

9、代码回滚:

10、idea设置GitHub账户:

11、分享过程到GitHub:

12、推送代码到远程库:

13、拉取远程库的代码:

14、克隆项目到本地:

Gitee:

Gitee导入Github项目:


什么是版本控制

版本控制(Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。

  • 实现跨区域多人协同开发
  • 追踪和记载一个或者多个文件的历史记录
  • 组织和保护你的源代码和文档
  • 统计工作量
  • 并行开发、提高开发效率
  • 跟踪记录整个软件的开发过程
  • 减轻开发人员的负担,节省时间,同时降低人为错误

简单说就是用于管理多人协同开发项目的技术。

没有进行版本控制或者版本控制本身缺乏正确的流程管理,在软件开发过程中将会引入很多问题,如软件代码的一致性、软件内容的冗余、软件过程的事物性、软件开发过程中的并发性、软件源代码的安全性,以及软件的整合等问题。

常见的版本控制工具

我们学习的东西,一定是当下最流行的!

主流的版本控制器有如下这些:

  • Git
  • SVN(Subversion)
  • CVS(Concurrent Versions System)
  • VSS(Micorosoft Visual SourceSafe)
  • TFS(Team Foundation Server)
  • Visual Studio Online

版本控制产品非常的多(Perforce、Rational ClearCase、RCS(GNU Revision Control System)、Serena Dimention、SVK、BitKeeper、Monotone、Bazaar、Mercurial、SourceGear Vault),现在影响力最大且使用最广泛的是Git与SVN

版本控制分类

1、本地版本控制

记录文件每次的更新,可以对每个版本做一个快照,或是记录补丁文件,适合个人用,如RCS。

idea 中java文件被画上一条横线_git

2、集中版本控制  SVN

所有的版本数据都保存在服务器上,协同开发者从服务器上同步更新或上传自己的修改

idea 中java文件被画上一条横线_idea 中java文件被画上一条横线_02

所有的版本数据都存在服务器上,用户的本地只有自己以前所同步的版本,如果不连网的话,用户就看不到历史版本,也无法切换版本验证问题,或在不同分支工作。而且,所有数据都保存在单一的服务器上,有很大的风险这个服务器会损坏,这样就会丢失所有的数据,当然可以定期备份。代表产品:SVN、CVS、VSS

3、分布式版本控制 Git

每个人都拥有全部的代码!安全隐患!

所有版本信息仓库全部同步到本地的每个用户,这样就可以在本地查看所有版本历史,可以离线在本地提交,只需在连网时push到相应的服务器或其他用户那里。由于每个用户那里保存的都是所有的版本数据,只要有一个用户的设备没有问题就可以恢复所有的数据,但这增加了本地存储空间的占用。

不会因为服务器损坏或者网络问题,造成不能工作的情况!

idea 中java文件被画上一条横线_版本控制_03

Git与SVN的主要区别

SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而工作的时候,用的都是自己的电脑,所以首先要从中央服务器得到最新的版本,然后工作,完成工作后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,对网络带宽要求较高。

idea 中java文件被画上一条横线_idea 中java文件被画上一条横线_04

Git是分布式版本控制系统,没有中央服务器,每个人的电脑就是一个完整的版本库,工作的时候不需要联网了,因为版本都在自己电脑上。协同的方法是这样的:比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。Git可以直接看到更新了哪些代码和文件!

Git是目前世界上最先进的分布式版本控制系统。

软件下载

打开 [git官网] https://git-scm.com/,下载git对应操作系统的版本。

所有东西下载慢的话就可以去找镜像!

官网下载太慢,我们可以使用淘宝镜像下载:http://npm.taobao.org/mirrors/git-for-windows/

idea 中java文件被画上一条横线_git_05

下载对应的版本即可安装!

安装:无脑下一步即可!安装完毕就可以使用了!

启动Git

安装成功后在开始菜单中会有Git项,菜单下有3个程序:任意文件夹下右键也可以看到对应的程序!

idea 中java文件被画上一条横线_idea 中java文件被画上一条横线_06

Git Bash:Unix与Linux风格的命令行,使用最多,推荐最多(如清屏命令是clear)

Git CMD:Windows风格的命令行(如清屏命令是cls)

Git GUI:图形界面的Git,不建议初学者使用,尽量先熟悉常用命令

常用的Linux命令

平时一定要多使用这些基础的命令!

1)、cd : 改变目录。

2)、cd . . 回退到上一个目录,直接cd进入默认目录

3)、pwd : 显示当前所在的目录路径。

4)、ls(ll):  都是列出当前目录中的所有文件,只不过ll(两个ll)列出的内容更为详细。

5)、touch : 新建一个文件 如 touch index.js 就会在当前目录下新建一个index.js文件。

6)、rm:  删除一个文件, rm index.js 就会把index.js文件删除。

7)、mkdir:  新建一个目录,就是新建一个文件夹。

8)、rm -r :  删除一个文件夹, rm -r src 删除src目录


rm -rf / 切勿在Linux中尝试!删除电脑中全部文件!


9)、mv 移动文件, mv index.html src index.html 是我们要移动的文件, src 是目标文件夹,当然, 这样写,必须保证文件和目标文件夹在同一目录下。

10)、reset 重新初始化终端/清屏。

11)、clear 清屏。

12)、history 查看命令历史。

13)、help 帮助。

14)、exit 退出。

15)、#表示注释

Git配置

所有的配置文件,其实都保存在本地!

idea 中java文件被画上一条横线_github_07

查看不同级别的配置文件:

#查看所有配置  git config -l
#查看系统  configgit config --system --list  
#查看当前用户(global)配置   git config --global  --list

Git相关的配置文件:

1)、Git\etc\gitconfig  :Git 安装目录下的 gitconfig     --system 系统级

2)、C:\Users\Administrator\ .gitconfig    只适用于当前登录用户的配置  --global 全局

这里可以直接编辑配置文件,通过命令设置后会响应到这里。

idea 中java文件被画上一条横线_git_08

设置/修改用户名与邮箱(用户标识,必要)

当你安装Git后首先要做的事情是设置你的用户名称和e-mail地址。这是非常重要的,因为每次Git提交都会使用该信息。它被永远的嵌入到了你的提交中:

git config --global user.name "hyf"  #名称
git config --global user.email 1902767016@qq.com   #邮箱

只需要做一次这个设置,如果你传递了--global 选项,因为Git将总是会使用该信息来处理你在系统中所做的一切操作。如果你希望在一个特定的项目中使用不同的名称或e-mail地址,你可以在该项目中运行该命令而不要--global选项。总之--global为全局配置,不加为某个项目的特定配置。

idea 中java文件被画上一条横线_git_09

该用户名与代码托管平台没有任何关系,仅标记是谁提交的代码。

Git的工作区域:

Git4个工作区域,分别为:工作区、版本库、暂存区和远程仓库

  • 工作区(Working Directory):就是我们项目的目录

idea 中java文件被画上一条横线_暂存区_10

  • 版本库(Repository):工作区内有一个.git文件,它就是Git的版本库,存储了所有的版本信息

idea 中java文件被画上一条横线_版本控制_11

  • 暂存区(Stage)(或者叫index):就是一个保存了下次将提交的文件列表信息的文件,在Git仓库目录中。
  • 远程仓库(Remote Repository):就是我们在服务器上搭建的仓库。例如:GithubGitlabGiteeCoding

基本的Git工作流程如下:

  • 在工作目录修改文件
  • 暂存文件,将文件快照放入暂存区
  • 提交更新,找到暂存区的文件,将快照永久性存储到到Git仓库区(本地)
  • 将本地仓库的变更推送到远程仓库

git基本命令:

# 查看指定文件状态git status [filename]

# 查看所有文件状态git status

# git add xxx.xxx 添加某个文件到暂存区

# git add readme.txt and ant.txt 如果要将多个文件加入到暂存区,可以采用以上类似代码

# git *.txt  也可以使用通配符方式批量提交文件:

# git add . 添加所有文件到暂存区

# git commit -m "日志信息" 文件名

# git log 查看详细日志信息

# git reflog 查看简略日志信息

(1).git add all可以提交未跟踪、修改和删除文件。 (2).git add .可以提交未跟踪和修改文件,但是不处理删除文件。  

 

idea 中java文件被画上一条横线_github_12

# 版本穿梭 git reset --hard 简略版本号

如 git reset --hard 64c8e15

Git 切换版本,底层其实是移动的 HEAD 指针:

idea 中java文件被画上一条横线_暂存区_13

idea 中java文件被画上一条横线_git_14

 heads中指向当前的版本号。

Git文件的四种状态:

版本控制就是对文件的版本控制,要对文件进行修改、提交等操作,首先要知道文件当前在什么状态,不然可能会提交了现在还不想提交的文件,或者要提交的文件没提交上。

工作区的文件 git add 后到暂存区,暂存区的文件 git commit 后到版本库。

Untracked(未跟踪状态)

未跟踪,此文件在文件夹中,但并没有加入到git库,不参与版本控制。通过git add 状态变为Staged。(暂存状态) 

在开发中,我们新创建的文件其实就是系统里的“新生儿”。在我们将它们记录在案之前,它们的状态就是untrack。所以当你在一个git项目当中新建了文件的时候,如果你用git status命令去查看git当中的状态,就会看到系统会提示你有些文件状态是untrack。

现在,让我们在项目下创建一个新的 README 文件。 如果之前并不存在这个文件,使用 git status 命令,你将看到一个新的未跟踪文件:

$ echo 'My Project' > README $ git status On branch master Your branch is up-to-date with 'origin/master'. Untracked files: (use "git add <file>..." to include in what will be committed) README nothing added to commit but untracked files present (use "git add" to track)

在状态报告中可以看到新建的 README 文件出现在 Untracked files 下面。 未跟踪的文件意味着 Git 在之前的快照(提交)中没有这些文件;Git 不会自动将之纳入跟踪范围,除非你明明白白地告诉它“我需要跟踪该文件”。 这样的处理让你不必担心将生成的二进制文件或其它不想被跟踪的文件包含进来。

Staged(暂存状态):

暂存状态,执行git commit则会把修改同步到库中,这时库中的文件和本地文件又变为一致,文件为Unmodify状态。执行 git rm --cached <file>  可删除暂存区的文件,并转变为 unstage 状态。


 使用命令 git add 开始跟踪一个名为README的文件:

$ git add README

此时再运行 git status 命令,会看到 README 文件已被跟踪,并处于暂存状态:

$ git status On branch master Your branch is up-to-date with 'origin/master'. Changes to be committed: (use "git restore --staged <file>..." to unstage) new file: README

只要在 Changes to be committed 这行下面的,就说明是已暂存状态。 如果此时提交,那么该文件在你运行 git add 时的版本将被留存在后续的历史记录中。 你可能会想起之前我们使用 git init 后就运行了 git add <files> 命令,开始跟踪当前目录下的文件。 git add 命令使用文件或目录的路径作为参数;如果参数是目录的路径,该命令将递归地跟踪该目录下的所有文件。

Unmodify(又称Committed)(文件已经入库(已commit) 且未修改):

文件已经入库,未修改,即版本库中的文件快照内容与文件夹中完全一致。

这种类型的文件有两种去处, 如果它被修改,而变为Modified。

如果使用git rm移出版本库, 则成为Untracked文件。

Modified(文件已修改)

Changes not staged for commit 这行下面,说明已跟踪文件的内容发生了变化,但还没有放到暂存区。

文件已修改,仅仅是修改,并没有进行其他的操作。这种文件可以通过git add可进入暂存staged状态,或使用git checkout则丢弃修改过,返回到unmodify状态,或者使用git checkout即从库中取出文件, 覆盖当前修改,或者使用git restore命令来取消这个文件的登记信息,也就是让他回到“新生儿”的状态。

如果在 Modified 状态的时候git add添加文件到暂存区,但随后又对文件进行了修改,那么暂存区保存的是未修改前的文件,并且此时的Modified状态依旧会有该文件的存在。 如果你现在提交,提交的版本是你最后一次运行 git add 命令时的那个版本,而不是最新修改的Modified状态的版本。

idea 中java文件被画上一条横线_暂存区_15

idea 中java文件被画上一条横线_暂存区_16

idea 中java文件被画上一条横线_git_17

 git status 命令的输出十分详细,但其用语有些繁琐。 Git 有一个选项可以帮你缩短状态命令的输出,这样可以以简洁的方式查看更改。 如果你使用 git status -s 命令或 git status --short 命令,你将得到一种格式更为紧凑的输出。

$ git status -s
 M README
MM Rakefile
A  lib/git.rb
M  lib/simplegit.rb
?? LICENSE.txt

新添加的未跟踪文件前面有 ?? 标记,新添加到暂存区中的文件前面有 A 标记,修改过的文件前面有 M 标记。 输出中有两栏,左栏指明了暂存区的状态,右栏指明了工作区的状态。例如,上面的状态报告显示:README 文件在工作区已修改但尚未暂存,而 lib/simplegit.rb 文件已修改且已暂存。 Rakefile 文件已修改,暂存后又作了修改,因此该文件的修改中既有已暂存的部分,又有未暂存的部分。

仓库的搭建:

创建本地仓库的方法有两种:一种是创建全新的仓库,另一种是克隆远程仓库。

1、创建全新的仓库,需要用GIT管理的项目的根目录执行:

# 在当前目录新建一个Git代码库
$ git init

在任意文件夹中使用git init可将该文件夹变成git可以管理的仓库,执行后该文件夹内会多了一个.git的隐藏文件夹,关于版本等的所有信息都在这个目录里面。

2、另一种方式是克隆远程目录,由于是将远程服务器上的仓库完全镜像一份至本地!

# 克隆一个项目和它的整个代码历史(版本信息)
$ git clone 网址

删除操作:

rm xxx       

删除工作区的文件,但不删除暂存区的文件,若需在这个基础上git add,将删除操作同步到暂存区。

上述操作可用git rm替代。

rm -r xxx       

删除工作区的目录,但不删除暂存区的目录,若需在这个基础上git add,将删除操作同步到暂存区。

上述操作可用git rm -r替代。

git rm -f xxx

如果文件在工作区被修改后,想要删除,如果直接使用git rm,会报错,可以使用git rm -f强制删除。

git rm --cached xxx

删除暂存区的文件但保留工作区的文件。

什么是分支:

在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行。对于初学者而言,分支可以简单理解为副本,一个分支就是 一个单独的副本。(分支底层其实也是指针的引用)

master是默认的主分支。

idea 中java文件被画上一条横线_github_18

分支的好处

        同时并行推进多个功能开发,提高开发效率。 各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。

分支的操作

命令名称

作用

git branch 分支名

新建一个分支,但依然停留在当前分支

git checkout -b 分支名

新建一个分支,并切换到该分支

git branch

列出所有本地分支

git branch -v

列出所有本地分支(带版本号)

git branch -r

列出所有远程分支

git checkout 分支名

切换分支

git merge 分支名

把指定的分支合并到当前分支上

git branch -d 分支名

删除指定分支

git push origin --delete 分支名

删除远程分支

每一个分支都有自己的一个版本号:

idea 中java文件被画上一条横线_idea 中java文件被画上一条横线_19

合并冲突:

冲突产生的表现:后面状态为 MERGING。

idea 中java文件被画上一条横线_git_20

冲突产生的原因: 合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改。Git 无法替我们决定使用哪一个。必须人为决定新代码内容。

如果A分支没改而B分支在A分支的基础之上改了,那么如果将B分支合并到A分支上,则不会报错,默认选择用B分支覆盖A分支。

查看状态(检测到有文件有两处修改)

 

idea 中java文件被画上一条横线_github_21

解决冲突:

(1)编辑有冲突的文件,删除特殊符号,并决定要使用的内容

        特殊符号:<<<<<<< HEAD 当前分支的代码 ======= 合并过来的代码 >>>>>>> hot-fix

(2)添加到暂存区

idea 中java文件被画上一条横线_版本控制_22

(3)执行提交(注意:此时使用 git commit 命令时不能带文件名) 

idea 中java文件被画上一条横线_idea 中java文件被画上一条横线_23

B分支解决冲突合并到A分支,B分支的内容也不会发生变化。

master、hot-fix 在底层其实都是指向具体版本记录的指针。当前所在的分支,其实是由 HEAD 决定的。所以创建分支的本质就是多创建一个指针。

HEAD 如果指向 master,那么我们现在就在 master 分支上。 HEAD 如果执行 hotfix,那么我们现在就在 hotfix 分支上。

所以切换分支的本质就是移动 HEAD 指针。

Git团队协作:

idea 中java文件被画上一条横线_git_24

idea 中java文件被画上一条横线_版本控制_25

Git连接Github:

创建Github仓库:

 

idea 中java文件被画上一条横线_暂存区_26

idea 中java文件被画上一条横线_idea 中java文件被画上一条横线_27

远程仓库操作

命令名称

作用

git remote -v

查看当前所有远程地址别名

git remote add 别名 远程地址

给远程地址起别名

git push 别名/链接 分支

推送本地分支上的内容到远程仓库

git clone 远程地址

将远程仓库的内容克隆到本地

git pull 远程库地址别名 远程分支名

将远程仓库对于分支最新内容拉下来后与当前本地分支直接合并

idea 中java文件被画上一条横线_idea 中java文件被画上一条横线_28

Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git remote -v

Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git remote add ori https://github.com/atguiguyueyue/git-shTest.git    # ori为别名

Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git remote -v
ori https://github.com/atguiguyueyue/git-shTest.git (fetch)
ori https://github.com/atguiguyueyue/git-shTest.git (push)

为什么明明只创建了一个别名却查询到两个别名?

因为这个别名既可以拉去(fetch),也可以推送(push)。

建议把远程仓库,本地仓库,别名设为一致。

推送至远程仓库:

idea 中java文件被画上一条横线_版本控制_29

如果没有凭证,那么需要进行登录操作:

idea 中java文件被画上一条横线_idea 中java文件被画上一条横线_30

 

idea 中java文件被画上一条横线_github_31

常见错误:

idea 中java文件被画上一条横线_github_32

 在和远程仓库关联后,我们通过 push 命令将本地仓库的文件推送到线上仓库时,出现了如上错误:

常见原因:

1、本地git仓库目录下为空

2、本地仓库add后未commit

3、git init错误

拉取远程库:

idea 中java文件被画上一条横线_git_33

拉取会自动commit。

克隆远程库:

Layne@LAPTOP-Layne MINGW64 /d/Git-Space/pro-linghuchong
$ git clone https://github.com/atguiguyueyue/git-shTest.git
Cloning into 'git-shTest'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.

idea 中java文件被画上一条横线_git_34

克隆不需要登录,因为是开源的,谁都可以访问。

clone 会做如下操作。1、拉取代码。2、初始化本地仓库。3、自动创建别名(默认origin)

clone 和 pull 的区别:

idea 中java文件被画上一条横线_版本控制_35

团队内协作:

idea 中java文件被画上一条横线_暂存区_36

 如果没有成为团队的成员就直接向该项目提交代码的话,就会报上述错误。

项目添加成员的方法:

1)选择邀请合作者:

idea 中java文件被画上一条横线_github_37

2)填入想要合作的人

idea 中java文件被画上一条横线_git_38

3 ) 复 制 地 址 并 通 过 微 信 钉 钉 等 方 式 发 送 给 该 用 户 , 复 制 内 容 如 下 : https://github.com/atguiguyueyue/git-shTest/invitations

idea 中java文件被画上一条横线_idea 中java文件被画上一条横线_39

 4)在 atguigulinghuchong 这个账号中的地址栏粘贴收到邀请的链接,点击接受邀请。

idea 中java文件被画上一条横线_idea 中java文件被画上一条横线_40

 5)成功之后可以在 atguigulinghuchong 这个账号上看到 git-Test 的远程仓库,并可以修改内容并 push 到远程仓库。

团队外协作:

1)将远程仓库的地址复制发给邀请跨团队协作的人。

2)团队外的人访问该仓库后,点击 Fork 将项目叉到自己的本地仓库。

idea 中java文件被画上一条横线_idea 中java文件被画上一条横线_41

 叉成功后可以看到当前仓库信息。

idea 中java文件被画上一条横线_版本控制_42

3)团队外的人就可以编辑叉取过来的文件。

4)编辑完毕后,填写描述信息并点击左下角绿色按钮提交。

5)接下来点击上方的 Pull 请求,并创建一个新的请求并提交。

idea 中java文件被画上一条横线_github_43

6)项目管理员 GitHub 账号可以看到有一个 Pull request 请求。

idea 中java文件被画上一条横线_github_44

7)如果代码没有问题,可以点击 Merge pull reque 合并代码。

idea 中java文件被画上一条横线_版本控制_45

SSH 免密登录

我们可以看到远程仓库中还有一个 SSH 的地址,因此我们也可以使用 SSH 进行访问。

idea 中java文件被画上一条横线_暂存区_46

 此时GitHub提示我们还没有添加公钥,不能使用ssh登录。

代码:ssh-keygen -t 加密算法(一般是rsa) -C 描述

当我们执行完这串代码后,我们就可以在我们的C盘当前登录用户的文件夹里面找到一个.ssh文件夹,里面有一个公钥(pub结尾)和一个私钥。

idea 中java文件被画上一条横线_github_47

 往Github中添加我们的公钥:

idea 中java文件被画上一条横线_暂存区_48

 

idea 中java文件被画上一条横线_idea 中java文件被画上一条横线_49

 接下来再往远程仓库 push 东西的时候使用 SSH 连接就不需要登录了。

忽略文件:

有些时候我们不想把某些文件纳入版本控制中,比如数据库文件,临时文件,设计文件等。

 

idea 中java文件被画上一条横线_idea 中java文件被画上一条横线_50

idea 中java文件被画上一条横线_暂存区_51

idea 中java文件被画上一条横线_暂存区_52

问题 1:为什么要忽略他们?

答:与项目的实际功能无关,不参与服务器上部署运行。把它们忽略掉能够屏蔽 IDE 工具之间的差异。

问题 2:怎么忽略?

1)创建忽略规则文件 xxxx.ignore(前缀名随便起,建议是 git.ignore) 这个文件的存放位置原则上在哪里都可以,为了便于让~/.gitconfig 文件引用,建议也放在用户家目录下 

git.ignore 文件模版内容如下:

# 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

2)在.gitconfig 文件中引用忽略配置文件(此文件在 Windows 当前用户的目录中)

[user] 
    name = Layne 
    email = Layne@atguigu.com
[core] 
    excludesfile = C:/Users/asus/git.ignore

注意:这里要使用“正斜线(/)”,不要使用“反斜线(\)

git.ignore文件有如下规则:

  1. 忽略文件中的空行或以井号(#)开始的行将会被忽略。
  2. 可以使用Linux通配符。例如:星号(*)代表任意多个字符,问号(?)代表一个字符,方括号([abc])表示匹配任何一个列在方括号中的字符 (这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c),大括号({string1,string2,...})代表可选的字符串等。
  3. 如果名称的最前面有一个感叹号(!),表示例外规则,将不被忽略。
  4. 如果名称的最前面是一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录中的文件不忽略。
  5. 如果名称的最后面是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)。
  6. 如果在方括号中使用短划线分隔两个字符, 表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)。
  7. 使用两个星号(**)表示匹配任意中间目录,比如 a/**/z 可以匹配 a/z 、 a/b/z 或 a/b/c/z 等。
#为注释*.txt        #忽略所有 .txt结尾的文件,这样的话上传就不会被选中!

!lib.txt     #但lib.txt除外

/TODO        # 只忽略当前目录下(不包含子目录)的 TODO 文件,而不忽略其他目录的TODO文件 subdir/TODO

build/       # 忽略任何目录下名为 build 的文件夹

doc/*.txt    #会忽略 doc/notes.txt 但不包括 doc/server/arch.txt

doc/**/*.pdf        # 忽略 doc/ 目录及其所有子目录下的 .pdf 文件

公钥绑定(push免密码):

这个其实可以作为大家未来找工作的一个重要信息!

1、注册登录码云,完善个人信息

2、在get bash输入 ssh-keygen -t rsa 命令,会在当前用户目录下生成一个 .ssh 文件夹,文件夹中有一对 id_rsa 或 id_dsa 命名的文件,其中一个带 .pub 扩展名。 '.pub'文件是你的公钥,另一个则是私钥。

idea 中java文件被画上一条横线_版本控制_53

3、将公钥信息public key 添加到码云账户中,然后以后git push不再在需要密码了。

idea 中java文件被画上一条横线_github_54

IDEA中集成Git:

1、定位Git程序:

idea 中java文件被画上一条横线_github_55

 2、初始化本地库:

idea 中java文件被画上一条横线_idea 中java文件被画上一条横线_56

idea 中java文件被画上一条横线_版本控制_57

 

idea 中java文件被画上一条横线_git_58

成功初始化后,该目录下会多一个.git文件夹。

此时,在idea中文件会变成红色,表示未被追踪。

将单独一个文件添加到暂存区:

idea 中java文件被画上一条横线_github_59

对目录进行此操作则将目录下所有文件都添加到暂存区。

此时有可能会提示是否将该目录下被忽略的文件也添加到暂存区,一般选否。

(新建一个目录也会提示是否将该目录自动提交到暂存区,一般选否)

添加后文件变成绿色,表示添加到暂存区且未提交到本地库。

3、提交到本地库:

idea 中java文件被画上一条横线_暂存区_60

 

idea 中java文件被画上一条横线_github_61

提交后文件会变成正常的黑色,表示已提交到本地库。

若有修改,文件会变成蓝色。

蓝色可直接commit二次提交。

idea 中java文件被画上一条横线_git_62

4、切换提交版本: 

查看版本:

idea 中java文件被画上一条横线_git_63

切换版本:

idea 中java文件被画上一条横线_git_64

5、创建分支:

idea 中java文件被画上一条横线_版本控制_65

 

6、切换分支:

idea 中java文件被画上一条横线_暂存区_66

 

7、无冲突合并分支:

idea 中java文件被画上一条横线_暂存区_67

 

8、有冲突合并分支:

idea 中java文件被画上一条横线_idea 中java文件被画上一条横线_68

idea 中java文件被画上一条横线_git_69

 

idea 中java文件被画上一条横线_暂存区_70

 

9、代码回滚:

idea 中java文件被画上一条横线_github_71

 

idea 中java文件被画上一条横线_暂存区_72

 

idea 中java文件被画上一条横线_版本控制_73

 

10、idea设置GitHub账户:

 

idea 中java文件被画上一条横线_git_74

 

11、分享过程到GitHub:

idea 中java文件被画上一条横线_暂存区_75

 

idea 中java文件被画上一条横线_git_76

 

12、推送代码到远程库:

方法一:

idea 中java文件被画上一条横线_idea 中java文件被画上一条横线_77

方法二:

idea 中java文件被画上一条横线_版本控制_78

 然后:

idea 中java文件被画上一条横线_idea 中java文件被画上一条横线_79

因为idea默认使用https地址提交的,会受网络影响,我们可以通过ssh链接提交。

方式:

        单击仓库名,选择 Define remote 创建新的别名。

idea 中java文件被画上一条横线_git_80

         URL处填入仓库的ssh链接即可。名字可自定义。

idea 中java文件被画上一条横线_github_81

 选择链接推送代码。

注意:push 是将本地库代码推送到远程库,如果本地库代码跟远程库代码版本不一致,push 的操作是会被拒绝的。也就是说,要想 push 成功,一定要保证本地库的版本要比远程库的版本高!

因此一个成熟的程序员在动手改本地代码之前,一定会先检查下远程库跟本地代码的区别!如果本地的代码版本已经落后,切记要先 pull 拉取一下远程库的代码,将本地代码更新到最新以后,然后再修改,提交,推送!(在改代码之前拉取,而不是改完之后再拉取)

13、拉取远程库的代码:

idea 中java文件被画上一条横线_git_82

选择合适的地址拉取就行。 

 

idea 中java文件被画上一条横线_idea 中java文件被画上一条横线_83

 注意:pull 是拉取远端仓库代码到本地,如果远程库代码和本地库代码不一致,会自动合并,如果自动合并失败,还会涉及到手动解决冲突的问题。

14、克隆项目到本地:

idea 中java文件被画上一条横线_版本控制_84

idea 中java文件被画上一条横线_idea 中java文件被画上一条横线_85

 

Gitee:

在ieda中Gitee与GitHub的操作大致相同。

Gitee导入Github项目:

idea 中java文件被画上一条横线_idea 中java文件被画上一条横线_86

 

idea 中java文件被画上一条横线_git_87