Git 远程操作

理解分布式版本控制系统

本地操作的本质

我们目前讨论的所有概念------工作区、暂存区、版本库等------都发生在本地计算机上。Git作为分布式版本控制系统,意味着:

  • 每台参与开发的计算机都拥有完整的版本库

  • 无需网络连接即可进行本地版本管理

  • 每个开发者都可以独立工作,然后交换修改




分布式协作原理

假设你和同事都在修改文件A:

  1. 你在本地修改文件A并提交

  2. 同事在他的本地修改文件A并提交

  3. 双方只需将各自的修改推送给对方,即可看到对方的修改




分布式系统的优势

  1. 高安全性:每个计算机都有完整版本库,一台机器故障不影响其他

  2. 离线工作:无需网络即可进行版本管理

  3. 灵活协作:支持多种协作方式




中央服务器的角色

实际开发中,通常会设置一个中央服务器(如GitHub、Gitee):

  • 主要作用是方便开发者交换修改

  • 即使没有服务器,开发者之间仍可直接交换修改

  • 服务器可防止本地故障导致数据丢失





远程仓库概念

Git作为分布式系统,同一个仓库可分布在多台机器上

基本分布原理

  1. 最初只有一台机器拥有原始版本库

  2. 其他机器可"克隆"这个版本库

  3. 每台机器的版本库都是完整的,没有主次之分




实际应用模式

  1. 一台服务器作为中央仓库,24小时运行

  2. 每个开发者从服务器克隆仓库到本地

  3. 开发者将本地提交推送到服务器,也从服务器拉取他人提交




远程仓库服务

  • GitHub:全球最大的Git仓库托管服务

  • Gitee:国内流行的Git仓库托管服务(码云)

  • 自建Git服务器:适合企业内部使用





新建远程仓库

下面以 Gitee 为例,演示如何创建远程仓库。

创建步骤

1、访问Gitee并新建仓库



2、填写仓库信息

必填项说明:
  • 仓库名称:建议使用有意义的英文名(如:my-project)

  • 路径:自动生成,通常与仓库名一致

  • 仓库介绍:简要描述项目功能(可选但推荐填写)

  • 仓库公开性:选择"公开"(所有人可见)或"私有"(仅成员可见)

注意仓库名一定要有意义,但这里是测试就随意命名了



3、仓库初始化配置

初始化选项
  • 设置语言:选择项目主要使用的编程语言,帮助平台进行代码统计

  • .gitignore文件:选择项目类型,自动生成忽略规则模板

  • 开源许可证:选择适合项目的开源协议(如MIT、GPL等)


模板文件设置
  • ReadMe模板:自动生成项目说明文档框架

  • Issue模板:设置问题反馈的标准格式

  • Pull Request模板:设置分支合并请求的标准格式


选择分支模型
  • 单分支模型:适合简单项目

  • Git Flow模型:经典的分支管理策略

  • 其他模型:根据项目特点选择



5、创建成功



6、设置仓库可见性

新创建的仓库有且只有一个默认的master分支





克隆远程仓库

将远程仓库克隆到本地使用git clone命令。

获取仓库链接


注意: git clone命令要在非仓库目录下执行




克隆协议对比

HTTPS协议

Shell 复制代码
$ git clone https://gitee.com/null_mian/test.git
Cloning into 'test'...
remote: Enumerating objects: 7, done.
remote: Counting objects: 100% (7/7), done.
remote: Compressing objects: 100% (7/7), done.
remote: Total 7 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
Unpacking objects: 100% (7/7), done.

$ ls test/
README.en.md  README.md

特点

  • 无需额外配置,可直接克隆

  • 每次操作可能需要输入账号密码

  • 适合临时访问



SSH协议

Shell 复制代码
# 由于我们没有添加本地库的公钥到远端库中,服务器拒绝了我们的clone链接
$ git clone git@gitee.com:null_mian/test.git
Cloning into 'test'...
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

特点

  • 需要配置SSH密钥

  • 一次配置,长期免密使用

  • 安全性更高


SSH密钥配置

1、检查现有密钥

Shell 复制代码
# 检查~/.ssh目录
$ ls ~/.ssh/
# 如果已有id_rsa和id_rsa.pub文件,可跳过生成步骤

2、生成SSH密钥

Shell 复制代码
# 注意要输入自己的邮箱,然后一路回车,使用默认值即可
$ ssh-keygen -t rsa -C "1234567890@qq.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/HY/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/HY/.ssh/id_rsa.
Your public key has been saved in /home/HY/.ssh/id_rsa.pub.
···

注意:这里的邮箱是你本地Git配置的的邮箱


3、查看公钥

Shell 复制代码
$ ls 
id_rsa  id_rsa.pub  known_hosts

$ cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDMiJrB9GOMPVwYAn0V54faLqz7T/aHjFhOFPvSHhE5acyJLFzLlFgMrdvhbWHrleUupaexZMl0/QFr1B13sted0XkK23NgcwbFlD6DH+cuw9HppwhwjPAjn+U0MgQrEAbmalqz3uVmCVNz1pSDYUDw6Z99e3+wQ1TuulZ/pOI1F9HeWHdKdjPGMqQVVDJSRIWv/iv63TGCVJ9M+WR6tep0CTGPigX3fBLxE7TUUj0GKQGDg4D+BQJ0S6SxTZb9DZmRD5UmVoRq2/kGwlPcmcuibHYP6Ck5V0+cPqJGTbGrBt4iOUeTcwrpYJeEWn+J2odTPCG+il/tj8r8IdEXCDpd 1234567890@qq.com

补充: id_rsa是私钥,不能泄露出去,id_ras.pub是公钥,可以放心地告诉任何人


4、添加公钥到 Gitee

补充:点击确认后,需要对你进行认证,输入你的账号密码即可


5、使用SSH克隆

Shell 复制代码
$ git clone git@gitee.com:null_mian/test.git
Cloning into 'test'...
remote: Enumerating objects: 7, done.
remote: Counting objects: 100% (7/7), done.
remote: Compressing objects: 100% (7/7), done.
remote: Total 7 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
Receiving objects: 100% (7/7), done.

$ ls test/
README.en.md  README.md

补充:多人协作的话,将他们的密钥也添加进来即可




查看远程仓库信息

克隆后,Git 会自动将本地仓库与远程仓库关联

Shell 复制代码
# 查看远程仓库名称
$ git remote
origin

# 查看详细信息
$ git remote -v
origin	git@gitee.com:null_mian/test.git (fetch)
origin	git@gitee.com:null_mian/test.git (push)

说明

  • origin是远程仓库的默认名称

  • fetch表示拉取权限

  • push表示推送权限

  • 如果没有推送权限,则看不到push地址





向远程仓库推送

当本地仓库有更新时,需要将更新push到远程仓库

本地修改并提交

Shell 复制代码
# 查看当前文件
$ ls -l
total 8
-rw-rw-r-- 1 HY HY 818 Dec 28 12:44 README.en.md
-rw-rw-r-- 1 HY HY 907 Dec 28 12:44 README.md

# 创建新文件并提交
$ vim file.txt
$ git add .
$ git commit -m "create file.txt"
[master 8c04ef2] create file.txt
 1 file changed, 1 insertion(+), 2 deletions(-)

注意 :本地namee-mail的配置要和远程仓库的一致,否则会出错




推送本地提交

使用git push命令将本地分支推送到远程仓库:

Shell 复制代码
# 基本语法
git push <远程主机名> <本地分支名>:<远程分支名>

# 如果本地分支名与远程分支名相同,可简写
git push <远程主机名> <本地分支名>


# 实际推送
$ git push origin master
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 274 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Powered by GITEE.COM [1.1.23]
remote: Set trace flag 6f44998f
To git@gitee.com:null_mian/test.git
   5e9eeb7..8c04ef2  master -> master

注意git push推送的是分支,而不是整个仓库





拉取远程仓库

当远程仓库有更新时,需要将更新pull到本地仓库

远程仓库修改

注意 :实际开发中不要直接在远程仓库修改文件,此处仅为演示




拉取远程更新

使用git pull命令拉取远程更新并合并到本地:

Shell 复制代码
# 基本语法
git pull <远程主机名> <本地分支名>:<远程分支名>

# 如果本地分支名与远程分支名相同,可简写
git pull <远程主机名> <本地分支名>


# 实际拉取
$ git pull origin 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), done.
From gitee.com:null_mian/test
 * branch            master     -> FETCH_HEAD
Updating 8c04ef2..7176cef
Fast-forward
 file.txt | 1 +
 1 file changed, 1 insertion(+)
 
# 查看更新内容
$ cat file.txt
hello git
第一次修改内容




Git配置优化

忽略特殊文件

某些文件不应提交到仓库(如配置文件、编译文件等),可通过.gitignore文件进行管理。

创建.gitignore文件

方式一:远程仓库初始化时创建

创建仓库时勾选生成.gitignore模板选项:


方式二:手动创建

如果初始化时没有创建,可以手动在工作区根目录创建:

Shell 复制代码
# 创建.gitignore文件
$ vim .gitignore

# 添加并提交
$ git add .
$ git commit -m "add .gitignore"
[master eb21de3] add .gitignore
 1 file changed, 2 insertions(+)
 create mode 100644 .gitignore
 
 # 推送到远程仓库
$ git push origin master
Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 297 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Powered by GITEE.COM [1.1.23]
remote: Set trace flag 594585a2
To git@gitee.com:null_mian/test.git
   7176cef..eb21de3  master -> master


忽略规则示例

Plain 复制代码
# 1. 忽略特定文件
[filename]

# 2. 忽略一类文件(使用通配符)
*.ini        # 忽略所有.ini文件
*.so         # 忽略所有.so文件
*.log        # 忽略所有日志文件

# 3. 忽略目录
temp/        # 忽略temp目录
build/       # 忽略build目录

# 4. 排除特定文件(在忽略规则中例外)
!demo.so     # 不忽略demo.so文件

# 5. 复杂模式
.*           # 忽略所有以'.'开头的隐藏文件
!.gitignore  # 但不忽略.gitignore本身


验证忽略结果

Shell 复制代码
# 创建应被忽略的文件
$ touch a.so b.ini

# 检查Git状态
$ git status
On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working directory clean

# 如果.gitignore配置正确,这些文件被追踪


特殊情况处理

1、强制添加被忽略的文件

有时需要临时添加被忽略的文件,可以用-f选项强制添加

Shell 复制代码
# 强制添加被忽略的文件
git add -f important.so

# 查看文件状态
git status

建议 :尽量别使用-f选项强制添加,我们可以添加一条例外规则来达到同等效果


2、检查忽略规则

当文件被意外忽略时,可以用git check-ignore命令检查是哪个规则导致的

Shell 复制代码
# 检查文件被哪个规则忽略
$git check-ignore -v a.so
.gitignore:3:*.so	a.so

# Git告诉我们,.gitignore的第3行规则忽略了该文件,
# 于是我们就可以知道应该修订哪个规则

3、排除规则

当使用通配符*忽略一类文件,但需要排除其中个别文件时

Shell 复制代码
# 错误示例:排除规则可能会失效
.*           # 忽略所有以.开头的文件
!.gitignore  # 试图不忽略.gitignore,但可能失效

# 正确示例:明确指定排除
.*                   # 忽略所有以.开头的文件
!.*/                 # 但不要忽略目录
!.gitignore          # 不忽略.gitignore文件



给命令重命名

Git支持为常用命令创建别名,提高效率。

创建别名

Shell 复制代码
# 基本语法
git config --global alias.<别名> '<原始命令>'

# 示例:为复杂日志命令创建别名
$git config --global alias.lgpa 'log --graph --pretty=oneline --abbrev-commit'

补充

  • --global:全局生效,所有仓库都可用

  • 不加该参数:仅当前仓库生效



使用别名

Shell 复制代码
$ git config --global alias.lgpa 'log --graph --pretty=oneline --abbrev-commit'

$ git lgpa
*   aa31f2e merge ReadMe
|\  
| * 19895ee modify ReadMe for dev1
* | df5d186 modify ReadMe for master
|/  
* 9663d75 insert(+) 1 in ReadMe for dev branch

建议:初学者建议先熟悉完整命令,熟练后再使用别名

相关推荐
TheSumSt11 小时前
Python丨课程笔记Part3:语法进阶部分(控制结构与基础数据结构)
数据结构·笔记·python
IT199512 小时前
Qt笔记-使用SSH2进行远程连接linux服务器并上传文件
linux·服务器·笔记
利刃大大13 小时前
【2025年度创作总结】从笔记到实践,从思考到生活融合
笔记·生活
wdfk_prog13 小时前
Git实战指南:如何从另一个分支同步文件时完整保留Commit提交历史
git
In_life 在生活13 小时前
GIT stash 命令的使用
git
航Hang*14 小时前
Photoshop 图形与图像处理技术——第1章:数字图像基本知识
图像处理·笔记·ui·photoshop
SunkingYang15 小时前
如何通过命令和TortoiseGit工具来撤销最后一次提交,包含提交到缓存区,提交到远程仓库
git·tortoisegit·工作区·暂存区·远程仓库·撤销·最后一次提交
iconball15 小时前
个人用云计算学习笔记 --37 Zabbix
运维·笔记·学习·云计算·zabbix
联蔚盘云17 小时前
联蔚盘云-使用火山方舟的Deepseek+Doubao+CherryStudio构建本地运维知识库
经验分享