目录
注意:必看
安装前先去注册一个gitee账号 有的小伙伴可能会问?不是注册github嘛,,有实力的可以用那个,不过需要挂代理,至于代理,具体自己研究,我没有用过,不太清楚。。。 对于小白我还是建议先用 gitlab 或gitee。
为什么用git?
Git是目前最流行的分布式版本控制系统之一。在分布式版本控制系统中,没有单一的中央服务器来存储所有代码。相反,每个开发者都有自己的本地仓库,可以包含整个项目的历史。开发者可以自由地在本地进行更改,然后将这些更改推送到其他仓库或从其他仓库拉取更改。这种模式提供了高度的灵活性和可靠性,因为即使没有网络连接,开发者也可以继续工作。
仓库(Repository):存储项目文件的地方,包括所有历史记录和版本信息。
工作目录(Working Directory):当前检出的项目文件夹,你可以在这里编辑文件。
暂存区(Staging Area):一个临时区域,用于暂存即将提交的更改。
提交(Commit):对项目文件所做的更改被保存到仓库中,每次提交都会创建一个快照。
分支(Branch):允许你在不同的开发线路上工作,分支之间可以独立更改。
合并(Merge):将一个分支的更改合并到另一个分支。
冲突(Conflict):当两个分支对同一文件的同一部分进行了不同的更改时,合并时会出现冲突。
常用Git命令
git init:初始化一个新的Git仓库。
git clone [url]:克隆一个远程仓库到本地。
git add [file]:将文件添加到暂存区。
git commit -m "message":将暂存区的更改提交到仓库,并附上提交信息。
git status:查看工作目录和暂存区的状态。
git push [remote] [branch]:将本地分支的更新推送到远程仓库。
git pull [remote] [branch]:从远程仓库拉取更新并合并到本地分支。
git branch:列出、创建或删除分支。
git checkout [branch]:切换到指定分支。
git merge [branch]:将指定分支合并到当前分支。
git log:查看提交历史。
1. Git 的介绍
Git 是一个分布式版本控制系统,旨在高效处理从小型到大型的项目版本管理。它能够帮助团队协作,追踪项目的变化,并简化开发流程。
2. 如何安装 Git
不同操作系统的安装方法如下:
2.1 Windows
1. 下载 Git:
- 访问 [Git官网](https://git-scm.com)。
- 下载适合Windows系统的安装包。
2. 安装 Git:
- 双击下载的安装包。
- 按照提示逐步安装,保持默认设置即可。
3. 配置环境变量:
- 确认安装过程中选择了将Git添加到系统环境变量中。
4. 验证安装:
- 开启命令提示符(cmd)或PowerShell,输入以下命令:
git --version
- 如果安装成功, 会看到Git的版本信息。
2.2 macOS
1. 通过 Homebrew 安装:
- 打开终端,输入以下命令:
brew install git
2. 验证安装:
- 输入以下命令查看版本:
git --version
3. 通过 Xcode 安装:
还可以通过安装 Xcode Command Line Tools 来安装 Git,输入:
xcode-select --install
2.3 Linux
- 对于使用Debian或Ubuntu的用户,打开终端并输入:
sudo apt update
sudo apt install git
- 对于Fedora用户,使用以下命令:
sudo dnf install git
- 对于Arch Linux用户,运行:
sudo pacman -S git
- 验证安装:
git --version
3. Git 基本配置
安装后,基本的配置如下
1. 设置用户名和邮箱:
git config --global user.name "引号内是gitee/github注册用户名,填你自己的名字"
git config --global user.email " xxxx@XXX.com 你在git/gihub上提前注册好的邮箱"
ssh-keygen -t rsa -C "gitee注册邮箱" 生成秘钥
Gitee/GitHub上添加公钥
ssh-T xxxxx@xxxx.com 验证秘钥
HTTPS 协议克隆仓库:
git clone https://gitee.com/用户名/仓库名.git
使用 SSH 协议克隆仓库:
git clone git@gitee.com:用户名/仓库名.git
测试克隆(clone)github 一个名叫 tom的人的仓库,他的仓库名叫 tomcangku.git
xxx @xxx.com 这是远程到gitee或GitHub的SSH地址,用于通过SSH协议进行通信
git@github.com
这个地址是GitHub通用的 同理 git的是git@gitee.com 如下
git clone xxxxx@xxxxxxx.com:tom/tomcangku.git
2. 查看配置:
git config --list
4. 创建和管理仓库
4.1 创建新仓库
1.使用命令行创建新仓库:
注意: mkdir my_project git init my_project cd my_project 和下面命令一样
my_project 指的的是仓库/项目名,这个要改成你自己的。
mkdir my_project
cd my_project
git init
2. 从远程仓库克隆:
git clone https://github.com/username/repo.git
4.2 添加文件到仓库
1. 创建或添加文件:
touch file.txt
2. 添加文件到暂存区:
git add file.txt
3. 查看状态:
git status
4.3 提交更改
1. 提交文件到本地仓库:
git commit -m "添加file.txt文件"
5. 分支管理
5.1 创建新分支
- 创建并切换到新分支:
git checkout -b new_branch
5.2 切换分支
- 切换到现有分支:
git checkout master
5.3 查看分支
- 查看所有分支:
git branch
6. 合并分支
1. 切换到目标分支,如 `master`:
git checkout master
2. 合并其他分支:
git merge new_branch
7. 重点,处理冲突:,必然遇到。
1.手动解决冲突,
当两个分支同时修改了同一文件的同一部分,或者一个分支删除了文件而另一个分支修改了文件时,Git无法自动合并这些更改,从而导致合并冲突。解决这些冲突通常遵循以下步骤: 需要手动解决冲突
1.识别冲突文件:Git会在合并过程中标记出有冲突的文件。你可以使用git status命令查看这些文件。
2.打开冲突文件:冲突文件中会包含特殊标记,指示出冲突的具体位置。这些标记通常如下所示
<<<<<<< HEAD 当前分支的内容 ======= 要合并的分支的内容 >>>>>>> 分支名
3.编辑文件:手动编辑这些文件,决定保留哪些更改。你可以选择保留当前分支的更改、要合并分支的更改,或者将两者合并为一个新版本。
4.标记冲突为已解决:在文件中删除Git的冲突标记,并保存文件。
5.添加文件到暂存区:使用git add命令将解决冲突后的文件标记为已解决状态。
git add [文件名]
6.完成合并:使用git commit命令来完成合并。Git会自动创建一个新的合并提交。
git commit
这将打开一个文本编辑器,让你输入合并提交的信息。保存并关闭编辑器后,合并提交就会完成。
测试:在解决冲突并完成合并后,务必进行彻底的测试,以确保更改没有破坏任何现有功能。
2.典型的合并冲突案例及解决方案:
1. 同一文件的同一行被修改
案例:两个分支都修改了同一个文件的同一行代码。python代码
分支A:
def add(a, b): return a + b # 修改了返回值
分支B:
def add(a, b): return a + b # 添加了注释
解决:选择保留哪个分支的更改,或者合并两个分支的更改。
def add(a, b): # 返回两个数的和 return a + b # 保留分支A的更改,并添加分支B的注释
2. 文件被一个分支添加,被另一个分支删除
案例:一个分支添加了一个新文件,而另一个分支删除了同一个文件。Bash格式
分支A:
touch new_file.txt
分支B:
rm new_file.txt
解决:决定是否需要这个文件。如果需要,保留分支A的更改;如果不需要,保留分支B的更改。
3. 同一文件的不同部分被修改 3,4,5都是pytho代码
案例:两个分支修改了同一个文件的不同部分。
分支A:
def add(a, b): return a + b # 修改了函数体
分支B:
def add(a, b): # 添加了新的参数 def add(a, b, c): return a + b + c
解决:合并两个分支的更改,创建一个包含所有更改的新函数。
def add(a, b, c=None): if c is not None: return a + b + c else: return a + b # 合并了两个分支的更改
4. 同一函数的不同参数被添加
案例:两个分支向同一个函数添加了不同的参数。
分支A:
def add(a, b): return a + b
分支B:
def add(a, b, c): return a + b + c
解决:决定函数最终需要哪些参数,并相应地修改函数定义。
def add(a, b, c=None): if c is not None: return a + b + c else: return a + b
5. 文件格式或缩进冲突
案例:由于编辑器或个人编码风格的差异,导致文件格式或缩进不一致。
分支A:
def add(a, b): return a + b
分支B:
def add(a, b): return a + b
解决:选择一个统一的编码风格,并应用到整个文件。
3.Git合并冲突的图形化工具推荐
1.GitHub Desktop:这是一个简单易用的图形化界面工具,适用于GitHub仓库,但也可以用于其他Git仓库。它提供了直观的界面来处理分支、合并和解决冲突。
2.GitKraken:GitKraken是一个功能强大的Git客户端,它提供了清晰的视图来管理分支和合并冲突。它支持拖放操作,使得分支管理变得非常直观。
3.SourceTree:由Atlassian开发,SourceTree是一个免费的Git和Mercurial客户端,提供了一个图形化界面来管理代码仓库。它特别适合那些希望在图形化界面中进行版本控制的用户。
4.Visual Studio Code:虽然主要是一个代码编辑器,但VS Code内置了Git支持,可以很好地处理简单的合并冲突。对于复杂的冲突,VS Code允许你打开冲突文件,并在编辑器中直接解决冲突。
5.IntelliJ IDEA:对于使用Java或Kotlin等语言的开发者来说,IntelliJ IDEA是一个非常流行的集成开发环境(IDE),它内置了对Git的全面支持,包括解决合并冲突的功能。
4.在解决Git合并冲突时,如何避免代码丢失
1.理解冲突:在解决冲突之前,确保你完全理解了冲突的原因和上下文。
2.备份原始文件:在开始解决冲突之前,备份原始文件是一个好习惯,以防万一需要恢复。
3.逐步解决:不要一次性解决所有冲突。一次解决一个冲突,并确保每次更改后代码仍然可以编译和运行。
4.使用版本控制历史:如果需要,可以查看文件的历史版本来帮助你决定保留哪些更改。
5.测试:在解决冲突后,运行测试套件(如果有的话)来确保更改没有破坏任何功能。
6.代码审查:在合并分支之前,让其他团队成员审查你的更改,以确保没有遗漏重要的内容。
5.Git合并冲突解决后,如何确保代码质量
1.运行测试:确保所有自动化测试都通过,包括单元测试、集成测试和功能测试。
2.代码审查:提交合并请求(Pull Request),并邀请其他团队成员进行代码审查。审查过程中,其他开发者可以提供反馈,帮助发现潜在的问题。
3.代码风格检查:使用代码风格检查工具(如ESLint、Pylint等)来确保代码遵循团队的编码标准。
4.静态代码分析:使用静态代码分析工具(如SonarQube)来检测代码中的潜在问题,如安全漏洞、性能问题等。
5.手动检查:在自动化检查之外,进行手动代码审查,特别是对于复杂的逻辑或新添加的功能。
6.代码复审:在代码合并到主分支后,进行复审,确保合并后的代码在生产环境中表现正常。
8. 查看更改历史
- 查看提交历史:
git log
- 查看简要历史:
git log --oneline
9. 远程仓库操作
9.1 添加远程仓库
git remote add origin https://github.com/username/repo.git
9.2 推送更改
- 将本地更改推送到远程仓库:
git push origin master
9.3 拉取最新更改
- 从远程仓库获取最新更改并合并:
git pull origin master
10. 删除分支
- 删除本地分支:
git branch -d branch_name
- 强制删除:
git branch -D branch_name
11. 其他常用命令
- 查看未跟踪的文件:
git ls-files --others --exclude-standard
- 恢复未提交的更改:
git checkout -- file.txt
- 查看当前分支:
git rev-parse --abbrev-ref HEAD
- 查看远程地址:
git remote -v
总结
以上就是Git的安装与基本使用指南,从环境的搭建到实际操作的详细步骤,涵盖了大部分Git的核心命令和用法。借助这些工具将能够有效地进行版本控制,促进团队协作,提升开发效率。需要注意的是,随着使用的深入,可能会遇到更复杂的需求,持续学习将助于更好地掌握Git。
工具使用
GitHub Desktop
1.安装:访问GitHub Desktop官网下载并安装适合你操作系统的版本。
2.克隆仓库:使用GitHub Desktop克隆远程仓库到本地。
3.创建分支:在GitHub Desktop中创建新分支,开始你的工作。
4.提交更改:在本地完成更改后,使用GitHub Desktop提交这些更改。
5.解决冲突:如果在推送时遇到冲突,GitHub Desktop会提示你解决冲突。你可以直接在GitHub Desktop中打开冲突文件并编辑。
6.推送更改:解决冲突后,使用GitHub Desktop将更改推送到远程仓库。
GitKraken
1.安装:访问GitKraken官网下载并安装。
2.连接仓库:通过GitKraken连接到你的GitHub、GitLab或Bitbucket账户,或直接添加本地仓库。
3.创建分支:在GitKraken中创建新分支,并开始工作。
4.提交更改:在完成更改后,使用GitKraken提交更改。
5.解决冲突:在GitKraken中,如果存在冲突,它会高亮显示冲突文件。你可以直接在GitKraken中打开这些文件并解决冲突。
6.推送更改:解决冲突后,使用GitKraken推送更改到远程仓库。
SourceTree
1.安装:访问SourceTree官网下载并安装。
2.克隆仓库:使用SourceTree克隆远程仓库到本地。
3.创建分支:在SourceTree中创建新分支,并开始工作。
4.提交更改:在本地完成更改后,使用SourceTree提交这些更改。
5.解决冲突:如果遇到冲突,SourceTree会显示冲突文件。你可以直接在SourceTree中打开这些文件并解决冲突。
6.推送更改:解决冲突后,使用SourceTree推送更改到远程仓库。
Visual Studio Code
1.安装:下载并安装Visual Studio Code。
2.集成Git:安装Git扩展,如“GitLens”或VS Code内置的Git支持。
3.解决冲突:在编辑器中,VS Code会高亮显示冲突部分。你可以直接编辑这些部分来解决冲突。
4.提交更改:使用VS Code的源代码控制面板提交更改。
5.推送更改:解决冲突后,使用VS Code的源代码控制面板推送更改到远程仓库。
IntelliJ IDEA
1.安装:下载并安装IntelliJ IDEA。
2.集成Git:IntelliJ IDEA内置了Git支持,可以在“Version Control”面板中管理分支和提交。
3.解决冲突:在编辑器中,IntelliJ IDEA会高亮显示冲突部分。你可以直接编辑这些部分来解决冲突。
4.提交更改:使用IntelliJ IDEA的“Version Control”面板提交更改。
5.推送更改:解决冲突后,使用IntelliJ IDEA的“Version Control”面板推送更改到远程仓库。
对于初学者来说,哪个工具更易上手?
GitHub Desktop 和 Visual Studio Code 通常被认为对初学者更友好,因为它们提供了直观的图形界面和较少的复杂性。
IntelliJ IDEA 对于有编程背景的用户来说也很容易上手,尤其是对于Java、Kotlin等语言的开发者。
GitKraken 和 SourceTree 提供了强大的功能和直观的界面,但可能需要一些时间来熟悉它们的高级特性。
这些工具是否支持跨平台使用?
GitHub Desktop、GitKraken、SourceTree 和 Visual Studio Code 都支持跨平台使用,可以在Windows、macOS和Linux上运行。
IntelliJ IDEA 也支持跨平台使用,但其社区版和专业版在不同操作系统上的功能可能略有不同。
选择哪个工具取决于你的个人偏好、项目需求以及你对工具的熟悉程度。对于初学者来说,建议尝试几个不同的工具,找到最适合自己的那一个。
Git Extensions 的安装
Git Extensions汉化
Git Extensions配置
Git Extensions配置的参考来源:
https://jingyan.baidu.com/article/3c48dd34a76e29e10ae35845.html
前沿技术
Git的前沿技术包括:
- Git LFS(Large File Storage):用于管理大文件的版本控制。
- Git hooks:在特定的事件(如提交)发生时自动执行脚本。
- Git submodule:允许在一个Git仓库中嵌入另一个Git仓库。
Git hooks
Git hooks是一组在特定事件发生时自动执行的脚本,它们可以帮助开发人员自动化任务、检查代码质量、通知其他开发者等。Git hooks可以在提交代码前、推送代码后、合并分支前等事件发生时触发。
以下是一些常见的Git hooks及其用途:
- pre-commit:在提交代码之前执行,可以用来检查代码是否符合规范、是否存在拼写错误等。
- commit-msg:在提交代码时执行,可以用来验证提交信息是否符合规范。
- prepare-commit-msg:在准备提交信息之前执行,可以用来修改提交信息。
- pre-rebase:在执行rebase操作之前执行,可以用来备份提交记录或进行其他操作。
- post-checkout:在检出代码之后执行,可以用来设置工作目录的环境变量或执行其他操作。
- post-merge:在合并分支之后执行,可以用来更新版本控制系统或执行其他操作。
- pre-push:在推送代码到远程仓库之前执行,可以用来检查本地代码是否与远程代码一致。
- pre-receive:在接收到推送请求之前执行,可以用来验证推送请求是否符合规范。
- update:在每次推送代码时执行,可以用来更新版本控制系统或执行其他操作。
举例:假设我们有一个项目,需要在每次提交代码前检查代码风格是否符合规范。我们可以创建一个pre-commit的hook,在其中添加以下命令:
#!/bin/sh
# 检查代码风格是否符合规范
if ! grep -E "^(import|from)" my_project/*.py > /dev/null; then
echo "代码风格不符合规范,请检查!"
exit 1
fi
这样,在每次提交代码时,pre-commit hook会自动执行,检查代码风格是否符合规范。如果不符合规范,提交将被拒绝。
Git submodule
Git submodule 是 Git 中的一种子仓库管理方式,它允许在一个 Git 仓库中嵌入另一个 Git 仓库。使用 Git submodule 可以方便地管理多个独立的 Git 仓库,并且可以在主仓库中进行版本控制和协作开发。
使用 Git submodule 的步骤如下:
- 在主仓库中添加子仓库:
git submodule add <submodule_repository_url> <submodule_directory>
其中 <submodule_repository_url>
是子仓库的 URL,<submodule_directory>
是子仓库在主仓库中的目录。
- 初始化子仓库
git submodule init
- 更新子仓库:
git submodule update
-
提交主仓库时,需要同时提交主仓库和子仓库的更改。
-
如果需要删除子仓库,可以使用以下命令:
git submodule deinit <submodule_directory> rm -rf <submodule_directory> git rm <submodule_directory>
- 如果需要从远程仓库拉取子仓库的最新代码,可以使用以下命令:
git submodule update --remote
使用 Git submodule 的好处是可以方便地管理多个独立的 Git 仓库,并且可以在主仓库中进行版本控制和协作开发