在IDEA中使用Git

一、准备工作

这里我们使用 Gitee 做例子,使用 SSH 协议。看这个文章前最好看一下《》这个文章,了解一下 SSH。

1、生成秘钥对

首先要到 ~/.ssh 目录下进行操作,因为生成的公钥和私钥一般放在这个目录下,Windows 就是在用户目录的 .ssh 目录下,如果没有 .ssh 可以自行创建。

在这个目录下打开 Git bash 中使用以下指令生成秘钥对:

bash 复制代码
ssh-keygen -t ed25519

然后命令行中就会出现以下提示:

依次是输入秘钥的存储目录以及秘钥文件的名称,后面是输入秘钥文件的密码,然后确定密码。然后就生成了秘钥对:

然后就可以在目录中看到了生成的秘钥对:

2、配置 Gitee 的 SSH

可以在 Gitee 的用户设置中找到以下界面,然后配置 SSH,

将上面生成的公钥放到这里,然后就可以尝试进行连接了。

3、测试连接

我们可以通过以下指令进行连接测试:

ssh -i ~/.ssh/keydir -T git@gitee.com

将这里的 keydir 替换为秘钥所在位置,如果是第一次连接,就会出现以下提示:

The authenticity of host 'gitee.com (180.76.198.225)' can't be established.
ED25519 key fingerprint is SHA256:+ULzij2u99B9eWYFTw1Q4ErYG/aepHLbu96PAUCoV88.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

这里就就是提示你这个要连接的主机是未知的,让你确认要连接的主机的身份是否真正是你要连接的主机,这里输入 yes 后,就会出现以下提示:

这里说的是,主机名"gitee.com"被永久添加到了已知的主机列表,第二行就是我们成功连接到了 gitee.com

4、配置 config 文件

可以看到上面我们测试连接的时候,需要使用 -i 参数来指定私钥的位置,每次都这样会很麻烦,所以我们就可以通过配置 config 文件来简化这个操作。

在 Git bash 中使用:

vim config

创建并编辑 config 文件,然后再 config 文件中这样配置:

# Gitee config
Host gitee.com
        HostName gitee.com
        User git
        IdentityFile ~/.ssh/keydir

然后我们再次测试连接,这次我们不使用 -i 指定秘钥文件,发现也可以完成连接。

二、使用 IDEA 拉取一个远程库作项目

1、设置 Git 的路径

首先在设置中设置 Git 的路径,可以看到这里一般是自动检测的,可以自动检测到本机中安装的 Git,然后自动填入目录。

2、拉取远程仓库

我们也可以可以从下面的位置关闭当前的项目,

这样就可以回到仪表盘这里:

首先在仪表盘这里我们可以看到 Get from VCS(Version Control System),可以通过版本控制系统获取项目,点击这里的按钮,就可以得到以下窗口:

实际上也可以通过以下方式得到上面的窗口:

版本控制我们选择 Git,然后就可以在 URL 的框中填入我们的远程仓库的链接,这里我们使用 SSH 链接。

我们点击"Clone"按钮后,就可以完成克隆了,然后我们就可以看到了这个库的结构了。

3、对仓库的一些操作

1)添加文件到暂存区

我们在这个项目中新增一个文件,然后就会出现以下窗口:

这里就是提示我们是否要将这个新建的文件添加到 Git 中,如果点击取消,我们接下来还要手动地添加。这里我们暂时点击取消。

然后我们可以 add 这个文件:

右键这个文件,然后进行上图的操作,就可以将这个文件添加到暂存区。

2)提交到本地仓库

通过这样的操作,我们可以提交文件到本地仓库。

这里会需要我们填写提交的备注。

3)将本地仓库推送到远程仓库

通过以上的操作将本地仓库推送到远程仓库。

然后我们就可以在远程仓库中看到我们新建的文件:

4、补充

上面的对于仓库的操作,我们是使用的图形化界面操作的,实际上我们也可以在 IDEA 中的终端中使用命令行指令进行这些操作。

打开终端之后,我们就可以在终端中使用对应的指令进行对版本的控制了。例如下面这样:

三、IDEA 本地已有项目如何关联到远程仓库

如果我们在本地就已经有一个项目,这个项目已经完成了一些,但是并没有从一开始就纳入版本管理。现在我们需要将这个项目关联到远程仓库,需要怎么做呢?

1、方法一

在 Gitee 中创建一个仓库(非空仓库和空仓库都行):

创建仓库之后,复制仓库的地址,在本地的一个目录中克隆这个仓库,然后进入目录中:

然后将这些文件全部剪切到你的项目中,然后就可以在项目中使用 git 管理了。

2、方法二

1)创建了空仓库

在 Gitee 中创建一个空仓库(这里最好创建空仓库,也就是不勾选上面框中的选项)。

然后在本地项目的目录中使用:

bash 复制代码
git init

初始化仓库,然后使用:

bash 复制代码
git remote add origin 远程仓库链接

将本地仓库与远程仓库关联起来,然后就可以进行文件添加到暂存区,然后提交文件到本地仓库:

bash 复制代码
git add .
git commit -m "注释"

然后就可以将本地仓库提交到远程仓库了:

bash 复制代码
git push -u origin master

2)创建了非空仓库

如果你创建了非空仓库,操作就比较麻烦了。首先在推送到远程仓库前的过程是一致的:

bash 复制代码
git init
git remote add origin 远程仓库链接
git add .
git commit -m "注释"

接下来,如果你直接使用:

bash 复制代码
git push -u origin master

就会出现以下提示:

这里就是提示远程仓库有的部分本地没有,所以我们在推送之前需要拉取远程仓库:

但是也不能只是直接使用以下指令:

bash 复制代码
git pull origin master

因为会出现以下提示:

这里显示的是本地分支落后于远程的仓库。

这里我们就要使用:

bash 复制代码
git pull origin master --allow-unrelated-histories

这里就是允许无关的历史操作,然后非空库中的文件就会被添加到本地仓库中,然后就可以使用:

bash 复制代码
git push -u origin master

指令了。后面就可以进行正常的版本控制了。

3)补充

在使用:

bash 复制代码
git pull origin master --allow-unrelated-histories

指令时,如果本地仓库和远程仓库有同名的文件,就像我的本地仓库有 .gitignore 文件,远程仓库也有 .gitignore 文件,这时就会出现以下提示(这里实际上已经完成了 pull 操作,只有 .gitignore 文件的冲突没有解决):

这里显示的是自动合并失败,因为 .gitignore 文件在本地和远程仓库中都有更改,所以 git 无法自动合并两个文件,所以需要我们手动合并这个文件。

这时我们可以直接查看本地的 .gitignore 文件,可以发现文件内容已经被 git 标记了:

bash 复制代码
<<<<<<< HEAD

### IntelliJ IDEA ###
out/
!**/src/main/**/out/
!**/src/test/**/out/

=======

# Compiled class file
*.class

>>>>>>> cc274b9ccf401266cd6fea3dbec5b94ba5a26594

git 的标记就是:

bash 复制代码
<<<<<<< HEAD

=======

>>>>>>> cc274b9ccf401266cd6fea3dbec5b94ba5a26594

Git 会展示本地更改(<<<<<<< HEAD======= 之间)和远程更改(=======>>>>>>> origin/master 之间)。

接下来我们就可以对这个 .gitignore 文件进行更改,决定我们需要保留的部分,可以删除部分不需要的条目,也可以合并一些条目。

当我们编辑好 .gitignore 文件后,我们就可以使用:

bash 复制代码
git add .gitignore
git commit -m "fixed the conflict about .gitignore file"

将 .gitignore 文件提交到暂存区,然后进行提交。

最后,我们可以将更改推送到远程仓库:

bash 复制代码
git push -u origin master

这样就完成了对重名文件的合并。

相关推荐
无尽的大道3 分钟前
Java字符串深度解析:String的实现、常量池与性能优化
java·开发语言·性能优化
小鑫记得努力12 分钟前
Java类和对象(下篇)
java
binishuaio16 分钟前
Java 第11天 (git版本控制器基础用法)
java·开发语言·git
zz.YE18 分钟前
【Java SE】StringBuffer
java·开发语言
老友@18 分钟前
aspose如何获取PPT放映页“切换”的“持续时间”值
java·powerpoint·aspose
wrx繁星点点33 分钟前
状态模式(State Pattern)详解
java·开发语言·ui·设计模式·状态模式
Upaaui36 分钟前
Aop+自定义注解实现数据字典映射
java
zzzgd81636 分钟前
easyexcel实现自定义的策略类, 最后追加错误提示列, 自适应列宽,自动合并重复单元格, 美化表头
java·excel·表格·easyexcel·导入导出
友善的鸡蛋37 分钟前
解决:使用EasyExcel导入Excel模板时出现数据导入不进去的问题
java·easyexcel·excel导入
星沁城37 分钟前
240. 搜索二维矩阵 II
java·线性代数·算法·leetcode·矩阵