一.git的历史
- 诞生背景
- Git 诞生于 2005 年,是由 Linus Torvalds(Linux 操作系统的创始人)开发的。当时 Linux 内核开发社区在使用 BitKeeper(一种商业的版本控制系统)来管理 Linux 内核的代码。由于一些许可协议和社区协作方面的问题,Linux 开发社区需要一个新的、自由且高效的版本控制系统。
- Linus Torvalds 在借鉴了其他版本控制系统的经验基础上,结合 Linux 内核开发的特点和需求,开发出了 Git。其目的是为了满足 Linux 内核这种超大型项目的分布式开发,并且能够高效地处理众多开发者的代码贡献。
- 早期发展
- Git 从一开始就被设计成一个分布式版本控制系统。这种设计理念与当时流行的集中式版本控制系统(如 CVS 和 Subversion)形成了鲜明对比。
- 它迅速在 Linux 内核开发社区得到应用。开发者们可以方便地在本地克隆整个代码库,进行自己的修改和开发,然后再将修改后的代码合并回主代码库。这种方式极大地提高了开发效率,并且允许开发者在没有网络连接的情况下也能进行很多工作。
- 随着 Linux 内核开发社区的使用和推广,其他开源项目也开始注意到 Git 的优势。许多开源项目逐渐从其他版本控制系统迁移到 Git,因为它能够更好地适应分布式开发环境和开源协作的模式。
- 在开源和商业领域的拓展
- 2008 年,GitHub 网站上线。GitHub 是一个基于 Git 的代码托管平台,它为开发者提供了一个方便的场所来存储、分享和协作开发代码。GitHub 的出现进一步推动了 Git 的普及。
- 开发者可以轻松地在 GitHub 上创建自己的仓库,邀请其他开发者参与项目,通过拉取请求(Pull Request)机制来提交和审核代码修改。这使得开源项目的协作变得更加容易和透明。
- 在商业领域,许多公司也开始采用 Git 来管理内部的软件开发项目。无论是大型的互联网公司还是小型的软件工作室,Git 的分布式特性、分支管理功能以及对协作开发的支持都使其成为一个理想的选择。它可以帮助公司更好地组织开发团队,提高开发效率,并且便于对代码的版本和历史进行管理。
- 持续演进与生态系统的完善
- Git 本身也在不断发展和完善。开发团队持续优化 Git 的性能,例如提高克隆大型仓库的速度、改进合并算法以减少合并冲突等。
- 同时,围绕 Git 形成了一个庞大的生态系统。有许多工具和服务是基于 Git 开发的,如 GitLab(一个类似于 GitHub 的代码托管和协作平台,提供了更多的企业级功能)、Bitbucket(另一个代码托管平台),还有用于代码审查的工具(如 Gerrit)、用于持续集成和持续交付的工具(如 Jenkins、GitLab CI/CD 等)。这些工具和服务进一步拓展了 Git 的应用范围,使其成为现代软件开发过程中不可或缺的一部分。
Git
- Git 是一个分布式版本控制系统。这意味着每个用户的本地机器上都有一个完整的仓库副本,包括代码库的完整历史记录。例如,一个团队中有 5 个开发人员在开发一个项目,每个开发人员的本地仓库都包含了从项目初始状态到最新状态的所有提交信息。
一、安装 Git
我用的是windows系统,所以这里只教导windows系统的安装
- Windows 系统
- 你可以从 Git 官方网站(https://git-scm.com/)下载安装程序。下载完成后,运行安装程序,按照安装向导的提示进行操作。在安装过程中,你可以选择一些默认的配置选项,比如编辑器(如 Vim、Notepad++ 等)和终端模拟器等。
- 由于网站在国外,有时可能进不去,所以最新版的安装包已经给大家备好了
- 我用夸克网盘分享了
- 链接:https://pan.quark.cn/s/78dbc496cc37
- 你可以从 Git 官方网站(https://git-scm.com/)下载安装程序。下载完成后,运行安装程序,按照安装向导的提示进行操作。在安装过程中,你可以选择一些默认的配置选项,比如编辑器(如 Vim、Notepad++ 等)和终端模拟器等。
- 安装包下载好后,
注意选择路径时不要带中文和空格
说明:
(1)图标组件(Addition icons) : 选择是否创建桌面快捷方式。
(2)桌面浏览(Windows Explorer integration) : 浏览源码的方法,使用bash 或者 使用Git GUI工具。
(3)关联配置文件 : 是否关联 git 配置文件, 该配置文件主要显示文本编辑器的样式。
(4)关联shell脚本文件 : 是否关联Bash命令行执行的脚本文件。
(5)使用TrueType编码 : 在命令行中是否使用TruthType编码, 该编码是微软和苹果公司制定的通用编码。
4、选择完之后,点击“Next”,显示截图如下:
设置环境变量
选择使用什么样的命令行工具,一般情况下我们默认使用Git Bash即可:
(1)Git自带:使用Git自带的Git Bash命令行工具。
(2)系统自带CMD:使用Windows系统的命令行工具。
(3)二者都有:上面二者同时配置,但是注意,这样会将windows中的find.exe 和 sort.exe工具覆盖,如果不懂这些尽量不要选择。
接下来,git就下载好了
在桌面右键
你会发现你的桌面多了两个选项
任意文件夹下右键也会看到两个选项
右键打开git bash看一下
和cmd一样,不过用的时linux命令
接下来学一些基本的linux命令
- 文件和目录操作命令
- ls(list)
- 功能:用于列出目录中的文件和子目录。
- 示例:
ls
:列出当前目录下的所有非隐藏文件和目录。ls -a
:列出当前目录下的所有文件和目录,包括隐藏文件(以 “.” 开头的文件)。ls -l
:以长格式列出文件和目录的详细信息,包括文件权限、所有者、大小、修改日期等。
- cd(change directory)
- 功能:用于切换当前工作目录。
- 示例:
cd /home/user
:切换到 “/home/user” 目录。cd..
:切换到上一级目录。cd
(单独使用):切换到用户的主目录。
- pwd(print working directory)
- 功能:显示当前工作目录的绝对路径。
- 示例:在终端中输入
pwd
,会输出当前所在目录的完整路径,如 “/home/user/Documents”。
- mkdir(make directory)
- 功能:用于创建新的目录。
- 示例:
mkdir new_folder
:在当前目录下创建一个名为 “new_folder” 的新目录。mkdir -p parent/child
:创建一个嵌套的目录结构,即如果 “parent” 目录不存在,先创建 “parent” 目录,再在其中创建 “child” 目录。
- rmdir(remove directory)
- 功能:用于删除空目录。
- 示例:
rmdir empty_folder
:删除名为 “empty_folder” 的空目录。注意,如果目录非空,则会提示错误,需要先删除目录中的文件。
- cp(copy)
- 功能:用于复制文件或目录。
- 示例:
cp file1.txt file2.txt
:将 “file1.txt” 复制为 “file2.txt”,在同一目录下创建一个副本。cp -r dir1 dir2
:递归复制目录 “dir1” 到 “dir2”,包括目录中的所有文件和子目录。
- mv(move)
- 功能:用于移动文件或目录,也可用于重命名文件或目录。
- 示例:
mv file1.txt /home/user/Documents/
:将 “file1.txt” 移动到 “/home/user/Documents/” 目录下。mv old_name.txt new_name.txt
:将 “old_name.txt” 重命名为 “new_name.txt”。
- rm(remove)
- 功能:用于删除文件或目录。
- 示例:
rm file.txt
:删除 “file.txt” 文件。rm -r dir
:递归删除 “dir” 目录及其内部的所有文件和子目录,使用此命令要谨慎,因为删除的内容无法恢复。
- ls(list)
- 文件查看和编辑命令
- cat(concatenate)
- 功能:用于查看文件内容,将文件内容输出到终端。
- 示例:
cat file.txt
会将 “file.txt” 的内容显示在屏幕上。它也可以用于合并多个文件,如cat file1.txt file2.txt > combined_file.txt
,将 “file1.txt” 和 “file2.txt” 的内容合并到 “combined_file.txt” 中。
- less
- 功能:也是用于查看文件内容,但相比 cat 更灵活。它可以分页显示文件内容,方便查看大型文件。
- 示例:
less file.txt
,进入 less 查看模式后,可以使用上下箭头键滚动文件内容,按 “q” 键退出查看模式。
- nano
- 功能:一个简单的文本编辑器,用于创建和编辑文本文件。
- 示例:
nano new_file.txt
,打开一个名为 “new_file.txt” 的文件(如果不存在则创建),在编辑器中可以输入文字,编辑完成后,按 “Ctrl + O” 保存,按 “Ctrl + X” 退出。
- vi(或 vim)
- 功能:功能强大的文本编辑器,有命令模式和插入模式。
- 示例:
- 打开文件:
vi file.txt
。 - 进入插入模式:按 “i” 键,此时可以输入文本。
- 保存文件并退出:在命令模式(按 “Esc” 键进入)下,输入 “:wq”,“:w” 表示保存,“:q” 表示退出。
- 打开文件:
- cat(concatenate)
- 系统信息和管理命令
- uname(Unix name)
- 功能:用于获取系统信息,如操作系统名称、内核版本等。
- 示例:
uname -a
:输出详细的系统信息,包括内核名称、主机名、内核版本、硬件平台等。
- top
- 功能:用于实时查看系统的进程信息和资源使用情况,如 CPU 使用率、内存使用率等。
- 示例:在终端中输入
top
,会显示一个动态的进程列表,按 “q” 键退出查看模式。
- df(disk free)
- 功能:用于查看磁盘空间使用情况,包括磁盘分区的总容量、已使用容量、可用容量等。
- 示例:
df -h
,以人类可读的格式(如将字节数转换为 KB、MB、GB 等)显示磁盘空间信息。
- free
- 功能:用于查看系统内存的使用情况,包括总内存、已使用内存、空闲内存等。
- 示例:
free -m
,以 MB 为单位显示内存信息。
- ps(process status)
- 功能:用于查看当前系统中的进程状态。
- 示例:
ps
:显示当前终端启动的进程信息。ps -ef
:显示所有进程的详细信息,包括进程所有者、进程 ID、父进程 ID 等。
- kill
- 功能:用于终止进程。
- 示例:
kill -9 PID
,其中 “PID” 是进程的标识号,“-9” 是信号,表示强制终止进程。
- uname(Unix name)
- 网络和用户管理命令(部分)
- ifconfig(interface configuration)
- 功能:用于查看和配置网络接口信息,如 IP 地址、子网掩码等。在一些较新的 Linux 系统中,可能被 “ip addr” 命令替代。
- 示例:
ifconfig
,会显示系统中所有网络接口的信息,如 “eth0”(以太网接口)或 “wlan0”(无线接口)的 IP 地址等。
- ping
- 功能:用于测试网络连接,向目标主机发送 ICMP 数据包,检查是否能够收到响应。
- 示例:
ping google.com
,会不断向 “google.com” 发送数据包,并显示响应时间等信息,按 “Ctrl + C” 停止发送。
- useradd
- 功能:用于添加新用户。
- 示例:
useradd new_user
,会创建一个名为 “new_user” 的新用户账户。
- passwd
- 功能:用于设置或修改用户密码。
- 示例:
passwd new_user
,为 “new_user” 用户设置密码
- ifconfig(interface configuration)
三.git的基本配置
配置文件查看与编辑
- 查看配置信息
- 命令:
git config --list
- 解释:这个命令会列出所有的 Git 配置信息。配置信息分为系统级别、全局级别和仓库级别。系统级别配置会应用到系统上的所有用户,全局级别配置应用到当前用户的所有仓库,仓库级别配置仅应用于特定的仓库。如果配置项有重复,仓库级别配置会覆盖全局配置,全局配置会覆盖系统配置。
- 命令:
注意看上方的user.name和user.email
这是必须要配置的
接下来完整教大家如何配置和更改删除
先看看我们系统配置
打开我们git的安装目录
找到etc执行目录
gitconfig就是配置文件
接下来看我们的用户配置文件
C:\Users\ASUS
c盘用户目录下你自己设置的用户目录,我的时ASUS
.gitconfig就是用户配置文件(记得把隐藏目录打开)
想删除的话直接打开文件把用户信息删除就好了
需要有能够打开文件的编译器,(vscode就可以)
接下来配置用户名
用户信息配置
- 设置用户名
- 命令:
git config --global user.name "Your Name"
- 解释:“--global” 选项表示这是一个全局配置,会应用到该用户在这台机器上的所有 Git 仓库。“Your Name” 部分需要替换为你自己的名字,这个名字会出现在你提交(commit)的历史记录中,用于标识提交者。例如,
git config --global user.name "John Doe"
。
- 命令:
- 设置用户邮箱
- 命令:
git config --global user.email "your.email@example.com"
- 解释:同样使用 “--global” 进行全局配置。“your.email@example.com” 要替换为你自己的有效邮箱地址。这个邮箱也会在提交历史中出现,很多 Git 托管平台(如 GitHub、GitLab)会使用这个邮箱来关联你的账号和提交记录。
- 命令:
像这样,不出现上述第一次的错误提示,就代表配置成功
可以用上述的查看命令看一下是否配好
设置用户邮箱
- 命令:
git config --global user.email "your.email@example.com"
- 解释:同样使用 “--global” 进行全局配置。“your.email@example.com” 要替换为你自己的有效邮箱地址。这个邮箱也会在提交历史中出现,很多 Git 托管平台(如 GitHub、GitLab)会使用这个邮箱来关联你的账号和提交记录
配置完毕,git就安装好了
环境变量应该在下载时已经自动配置好了
接下来我们学习git的基本理论
-
远程仓库(Remote Repository)
- 用蓝色矩形框表示,位于图的左侧。
- 这是存储在远程服务器上的 Git 仓库,通常用于协作开发和备份。
-
本地仓库(Local Repository)
- 用蓝色矩形框表示,位于图的中间偏左。
- 这是存储在本地计算机上的 Git 仓库,包含了项目的所有版本信息。
-
工作区(Workspace)
- 用绿色矩形框表示,位于图的右侧。
- 这是你在本地计算机上实际看到和操作的项目目录,你可以在这里创建、修改和删除文件。
-
暂存区(Index / Stage)
- 用红色矩形框表示,位于图的下方。
- 这是一个介于工作区和本地仓库之间的中间区域,用于暂存你想要提交的文件修改
git项目创建和克隆
两种方式,生成克隆
1.
使用 git init 创建,可以看见我们的桌面多了一个.git文件
2.克隆
打开gitee,因为github在国内访问不是很流畅
所以我们用gitee
点击克隆
git clone 链接
一、初始化 Git 仓库
git init
:- 功能:在当前目录下创建一个新的 Git 本地仓库。
- 示例:
收起
bash
# 进入你想要创建 Git 仓库的目录 cd /path/to/your/directory # 初始化 Git 仓库 git init
- 解释:运行
git init
后,Git 会在当前目录下创建一个名为.git
的隐藏文件夹,该文件夹存储了 Git 仓库的所有信息,包括对象数据库、引用、配置文件等。
二、添加和提交文件
-
git add
:- 功能:将文件添加到暂存区,为提交做准备。
- 示例:
收起
bash
# 添加单个文件到暂存区 git add file.txt # 添加当前目录下的所有文件到暂存区 git add.
- 解释:使用
git add
命令可以将文件从工作区添加到暂存区。你可以选择添加单个文件,如git add file.txt
,或者使用git add.
将当前目录下的所有文件添加到暂存区。
-
git commit
:- 功能:将暂存区的文件提交到本地 Git 仓库。
- 示例:
收起
bash
# 提交暂存区的文件,并添加提交信息 git commit -m "Initial commit"
- 解释:
git commit -m "Initial commit"
将暂存区的文件存储到本地仓库,并使用"Initial commit"
作为本次提交的信息。提交信息应该清晰地描述此次提交所做的更改,以便在后续查看历史记录时能够理解。
三、查看状态和历史
-
git status
:- 功能:查看工作区和暂存区的状态。
- 示例:
收起
bash
git status
- 解释:该命令会显示当前工作区和暂存区的状态,包括哪些文件被修改、哪些文件在暂存区、哪些文件未被跟踪等信息。例如,如果修改了文件但未添加到暂存区,它会显示为
modified: file.txt (modified but not staged)
;如果添加到暂存区但未提交,会显示为Changes to be committed
。
-
git log
:- 功能:查看提交历史。
- 示例:
收起
bash
# 查看提交历史,显示每次提交的信息 git log # 查看简洁的提交历史 git log --oneline
- 解释:
git log
会列出每次提交的详细信息,包括提交的哈希值、作者、日期和提交信息。使用git log --oneline
可以查看更简洁的提交历史,仅显示哈希值和提交信息。
四、分支操作
-
git branch
:- 功能:管理分支。
- 示例:
收起
bash
# 创建一个新分支 git branch new_branch # 查看所有分支 git branch
- 解释:
git branch new_branch
会创建一个名为new_branch
的新分支。使用git branch
可以查看当前仓库的所有分支,当前所在分支会以*
标记。
-
git checkout
:- 功能:切换分支或恢复工作区文件。
- 示例:
收起
bash
# 切换到新分支 git checkout new_branch # 从仓库中恢复文件 git checkout -- file.txt
- 解释:
git checkout new_branch
将当前工作区切换到new_branch
分支。而git checkout -- file.txt
会将文件file.txt
恢复到最近一次提交的状态。
-
git merge
:- 功能:合并分支。
- 示例:
收起
bash
# 假设当前在 master 分支,合并 new_branch 分支 git merge new_branch
- 解释:先切换到要合并到的分支(如
master
),然后使用git merge new_branch
将new_branch
分支的修改合并到当前分支。如果合并过程中出现冲突,需要手动解决冲突。
五、远程仓库操作
-
git remote
:- 功能:管理远程仓库。
- 示例:
收起
bash
# 添加远程仓库,origin 是远程仓库的名称,URL 是远程仓库的地址 git remote add origin URL # 查看远程仓库信息 git remote -v
- 解释:
git remote add origin URL
将一个远程仓库添加到本地仓库,通常origin
是远程仓库的名称。git remote -v
会显示已添加的远程仓库的详细信息,包括名称和地址。
-
git push
和git pull
:- 功能:推送和拉取文件。
- 示例:
收起
bash
# 将本地分支推送到远程仓库 git push origin master # 从远程仓库拉取更新到本地 git pull origin master
- 解释:
git push origin master
将本地的master
分支的修改推送到名为origin
的远程仓库。git pull origin master
从名为origin
的远程仓库的master
分支拉取更新到本地。
六、其他操作
-
git diff
:- 功能:查看文件修改的差异。
- 示例:
收起
bash
# 查看工作区和暂存区的文件差异 git diff # 查看暂存区和最新提交的文件差异 git diff --staged
- 解释:
git diff
会显示工作区和暂存区文件的差异,包括修改的内容和修改的位置。git diff --staged
会显示暂存区和最近一次提交的文件之间的差异。
-
git reset
:- 功能:重置文件状态或提交。
- 示例:
收起
bash
# 取消暂存文件 git reset file.txt # 重置到上一次提交 git reset --hard HEAD~1
- 解释:
git reset file.txt
将文件file.txt
从暂存区移除,恢复到未暂存状态。git reset --hard HEAD~1
会将当前分支重置到上一次提交,这是一个比较危险的操作,会丢失最近一次提交的修改,请谨慎使用。
一、.gitignore
文件的作用
.gitignore
文件用于告诉 Git 哪些文件或目录不需要被版本控制,也就是让 Git 忽略对某些文件或目录的跟踪。这在实际开发中非常有用,例如,可以用它来排除一些编译生成的文件、依赖库文件、本地配置文件、日志文件等,因为这些文件通常不需要被提交到仓库中,而且可能会导致冲突或不必要的版本控制负担。
二、创建.gitignore
文件
- 你可以在 Git 仓库的根目录下创建一个名为
.gitignore
的文件。例如,使用以下命令:收起
bash
touch.gitignore
三、.gitignore
文件的内容规则
-
按文件名或目录名忽略:
收起
plaintext
# 忽略单个文件 file.txt # 忽略整个目录 directory/
这里,
file.txt
会被 Git 忽略,不会被添加到暂存区或提交到仓库中。directory/
会使 Git 忽略整个directory
目录及其内部的所有文件和子目录。 -
使用通配符:
收起
plaintext
# 忽略所有的.txt 文件 *.txt # 忽略所有以~结尾的文件 *~ # 忽略所有在 temp 目录下的.log 文件 temp/*.log
*.txt
会让 Git 忽略所有扩展名为.txt
的文件,无论它们在哪个目录下。*~
会忽略所有以~
结尾的文件。temp/*.log
会忽略temp
目录下的所有.log
文件。 -
使用否定规则:
收起
plaintext
# 忽略所有的.o 文件,但不忽略 build 目录下的.o 文件 *.o
!build/*.o
收起
plaintext
首先,`*.o`会让 Git 忽略所有的`.o`文件,但`!build/*.o`又会排除`build`目录下的`.o`文件,使其不被忽略,从而被 Git 跟踪。
- **按目录深度忽略**:
忽略根目录下的 build 目录
/build
忽略所有目录下的 build 目录
build/
收起
plaintext
`/build`只会忽略根目录下的`build`目录,而`build/`会忽略所有目录下的`build`目录,包括子目录中的。
**四、注意事项**
- 如果你已经将某个文件添加到 Git 仓库中,之后在`.gitignore`中添加了对该文件的忽略规则,该文件仍然会被 Git 跟踪。你需要使用以下命令将其从 Git 仓库中移除:
```bash
git rm --cached file.txt
这里,--cached
选项表示只从 Git 的暂存区移除文件,而不删除工作区的文件。
- 如果你不确定
.gitignore
规则是否正确,可以使用以下命令来检查哪些文件会被 Git 忽略:收起
bash
git check-ignore -v file.txt
这个命令会显示是否会忽略file.txt
文件以及使用了.gitignore
中的哪条规则。
五、常用的.gitignore
示例
以下是一些在不同开发环境中常用的.gitignore
示例:
-
Java 项目:
收起
plaintext
# 编译生成的类文件 *.class # 构建目录 target/ # 配置文件 config.properties
-
Python 项目:
收起
plaintext
# Python 缓存文件 __pycache__/ # 虚拟环境目录 venv/ # 配置文件 config.ini
-
Node.js 项目:
收起
plaintext
# Node 模块 node_modules/ # 构建文件 dist/ # 日志文件 logs/*.log
使用.gitignore
文件可以帮助你保持 Git 仓库的简洁和专注于代码的重要部分,避免不必要的文件进入版本控制,使开发过程更加高效和清晰。
码云的使用
gitee
因为github有墙,所以我们使用gitee作为示例
方式是一样的
生成ssh密钥
点击ssh,在.ssh目录下新建
输入ssh-keygen -t rsa,按回车键,按回车键,在目录下生成两个文件就ok了
点击带.pub的文件
复制
粘贴到,确定
新建仓库,这里就不示例了,大家打开gitee自行学习
克隆到本地
对比一下本地仓库和远程仓库
下面就是在idea中集成git了!!!(仅是详略版,马上出详细教程,有一定基础可以看)
按照图片操作就可以了,点击all setting
点击version control 点击git在右上角path to git executable 选择git安装目录下cmd下的git.exe,点击测试,能够出现你的版本号就可以了
接着我们创建一个项目,idea如何使用,这我就不能教你了
一
这是最新版的idea
我们选择文件夹
会发现选择目录会出现一个.git文件,记得勾选隐藏文件
创建仓库后就会出现git按钮,我们接下来就可以在git快捷操作了
点击commit后,可能会出现很多文件,下面介绍如何简化
小眼睛点击,就可以了
历史查看
回归版本
推送至远程仓库
第一种方式,右键
第二种
下面我们复制远程仓库
二远程克隆
在url输入地址