【分布式版本控制系统】GIT & 托管网站 & 客户端

本文详细介绍了Git的版本控制思想、基本操作以及与其他代码托管中心的交互,包括初始化本地仓库、删除文件、查看项目状态、版本记录、分支管理、冲突解决、与远程库交互等内容。讲解了Git的优势,如大部分操作在本地完成、完整性保证等,并对比了Git与SVN的区别。此外,还介绍了Git图形化界面操作和常用的代码托管平台如GitHub、BitBucket和GitLab的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上传到远程库

第一次上传

git add .
git commit -m"备注信息"

之后上传

git add .
git commit -m"备注信息"
git push origin  或 git -u push origin 指定origin为默认主机,后面就可以不加任何参数使用git push了

—————————————————

删除

$ git rm -h
用法:git rm [<选项>] [--] <文件>...

    -n, --dry-run         演习
    -q, --quiet           不列出删除的文件
    --cached              只从索引区删除
    -f, --force           忽略文件更新状态检查
    -r                    允许递归删除
    --ignore-unmatch      即使没有匹配,也以零状态退出

删除远程仓库文件:
1.git rm 文件名 ( -r 递归删除)
2.git commit -m"备注信息" 更新本地库
3.git push -u origin master 更新远程仓库
—————————————————
—————————————————
—————————————————
————————————————————————————————————

代码托管分两种,一种是SVN一种是GIT,二者都是一种技术;

集中式管理SVN(客户端:TottoiseSVN)
分布式管理GIT(客户端:sourcetree)

学习GIT不需要有SVN基础,但GIT都是Linux命令;
集中还是分散是针对每个开发者手中的代码而言的,具体不解释了。我常用的是GIT,使用命令行居多,偶尔使用图形化git–sourcetree;初学者可能对这一套东西不好理解,不会很深的体会到这么做对开发意义有多大。
代码托管说白了就是保管码书写的任意提交过的状态,那一刻的项目代码是什么样,我要是想回退到那一刻就可以回到哪。
之前代码遇到bug,但是要放下手头开发进度。这时可以另开一个hotfix热修复分支,没问题再合并到主分支上。git的log日志记录了这个项目的从生到死,每一步历程。N年后老子要回到V1.0版本也没人能拦住你。


GIT:版本控制

版本控制的思想(1.个人;2.团队)

个人:
代码修改的历史记录很多,如果已经写到了很复杂的状态,想进行修改,在复杂代码上修改很容易造成错误;
想回到过去,有没有后悔药吃?

团队:
团队中多人可能会一起开发同一个类(协同开发),若有人把别人写的优秀代码删除了,覆盖上了自己写的不合格的代码,这时就需要版本控制的思想来解决;

版本控制工具应该具备的功能:

  • 1.协同修改:多人一起修改服务端统一文件;
  • 2.数据备份:
  • 3.版本管理:保存每一个版本的文件信息需要 不保存重复数据 ,以节省存储空间,GIT采用文件快照方式,SVN采用增量式管理方式(保存修改部分);
  • 4.权限控制:对团队中开发人员进行权限区别;且GIT有独家功能:对团队外人员贡献的代码进行审核;
  • 5.历史记录:
  • 6.分支管理:让开发团队在工作过程中有多条生产线同时推进任务,提高效率;
    在这里插入图片描述
    GIT的优势:
  • 大部分操作在本地完成,不需联网(集中式系统一定要联网);
  • 完整性保证:提交前的数据 - Hash - 提交后的数据(不管Hash运算多少次,得到的结果都是不变的;输入的数据变了一点,Hash提交后的数据就会变很多,这是Hash神奇之处);
  • 尽可能添加数据而不是删除或修改数据;(代码 删/修改 后就找不回了,GIT尽量进行添加,而不是修改)
  • 分支操作快捷流畅;
  • 与Linux命令全面兼容;

在这里插入图片描述

Git和代码托管中心,比如GitHub

代码托管中心的任务:维护远程库;
参照上一张图,项目提交到本地库后,还需要交互到远程库;

  • 提问:【本地库】和【远程库】如何交互?
    两种情况:

1.团队内 协同开发图
(注意:PULL = FETCH + MERGE)
在这里插入图片描述
2.跨团队 协作图;
注意fork和clone区别(图中有写)
(注意:PULL = FETCH + MERGE)
在这里插入图片描述

托管中心 - 在局域网内:
可搭建:GitLab服务器

托管中心 - 在外网中:
可搭建:GitHub / 码云


GIT操作

分为两部分:1.GIT命令行操作;2.GIT图形化界面操作;

GIT命令行操作

本地库操作
——————————————————

  • 提问:如何初始化本地仓库?

进入想建立目录的路径下;
git init
返回:Initialized empty Git repository in /xxx/Documents/Git/wechat/.git/
此路径下建了一个空的Git仓库;

Linux下文件名前带了个点的都是默认隐藏的,想查看他?
ls -a

看看.git里有什么?
ls .git

HEAD		description	info		refs
config		hooks		objects

这就是本地库的效果!!!
注意!!
.git目录里存放的是本地库相关的子目录和文件,不要删除,要不要胡乱修改!!!

(知道它的存在即可,不要改动)

另外还需要设置签名;
形式:

  • 用户名:(必填)
  • Email:(选填)
    **作用:**只是为了区别程序员不同的身份;
    注意代码托管中心的账号密码和签名的用户密码没有任何关系!!
    这两个信息其实无关紧要,邮箱填不填都无所谓;
    一个项目里,碰到两个用户名和密码一样的人也是有可能的;
    代码托管网站的账户才是区分个人信息的标准;

设置签名的命令:
(默认系统用户级别)

  • 项目级别(仓库级别):仅在本地库范围内有效,比如/xxx/Documents/Git/wechat
  • 系统用户级别:git config --global登录当前Apple账号的用户范围;

git config user.name 名字
git config user.email 邮箱
git config --global user.name 名字
git config --global user.email 邮箱

查看 项目级别 的保存:
$ cat .git/config

[core]
	repositoryformatversion = 0
	filemode = true
	bare = false
	logallrefupdates = true
	ignorecase = true
	precomposeunicode = true
[user]
	email = [email protected]
	name = xxxx

查看 系统用户级别 的保存:
进入系统本账户文件夹:
$ls -la|less(查看隐藏信息)
看到了drwx------ 3 xxxx staff 96 Mar 5 09:33 .config
$ cat .gitconfig

[user]
	name = xxxx
	email = [email protected]

——————————————————

git status 查看项目状态】

作用:查看工作区、暂存区状态;

进入项目路径:
$ cd /Users/chiu/Documents/Git/wechat
$ git status

返回:
On branch master 现在在master分枝上;
No commits yet 本地库无已commit的内容;
nothing to commit (create/copy files and use “git add” to track)(暂存区里没内容)

【路径内随便新建一个文档,再查看项目状态】:
$ vim good.txt
$ git status

返回:

On branch master
No commits yet
Untracked files: 发现了未追踪的文件
  (use "git add <file>..." to 【include】 in what will be committed)
  (提示:用 git add 把他提交到暂存区)

	good.txt (显示为红色)

nothing added to commit but untracked files present (use "git add" to track)
(不能commit,即暂存区无内容;但未追踪的文件存在)
(新建文件时:要想track文件,必须先git add)

在这里插入图片描述

git add 后,查看项目状态】

git add .
git add *
ADD全部文件;

作用:把工作区的“新建/修改”添加到暂存区;

$ git add good.txt
$ git status

On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage) 用 git rm --cached 来撤回

	new file:   good.txt (显示为绿色,因为git add后到了暂存区)
	

在这里插入图片描述
试试看撤回!
$ git rm --cached good.txt
rm ‘good.txt’

git commit 后,查看项目状态】

提示需要输入信息,类似代码中的写注释;于是有两种方式:

  • (1).git commit -m "信息内容" 文件名
  • (2).git commit 文件名,直接进入VIM编辑;

$ git commit --amend:修改上一次已经commit的信息;

例子:
(1).git commit -m "My first commit of "good.txt",new file或者modified " good.txt
(2).

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# On branch master
#
# Initial commit
#
# Changes to be committed:
#       new file:   good.txt

下面进入VIM操作,输入完成保存退出即可;

:set nu 显示行号
i 进入Insert模式
输入信息,比如:My first commit new file: good.txt
esc 退出Insert模式
:wq 保存退出
在这里插入图片描述
返回:
root-commit:根提交 只在新建文件时出现,之后的修改都不会有root-commit出现;
0af5132:可以粗略认为是本次commit的版本号;
后面就是自己写的备注;
9 insertions(+):本次commit新增的行数(cat 文件名即可查看);
100644:文件权限;

[master (root-commit) 0af5132] My first commit new file: good.txt
 1 file changed, 9 insertions(+)
 create mode 100644 good.txt

$ git status
On branch master
nothing to commit, working tree clean 暂存区没有可Commit的;
—————————
以上是新建文件Commit,那么修改文件呢?

修改工作区的文件后,需要重新add到暂存区,commit到本地库;

$ vim good.txt(比如我删除了几行)
$ git status

On branch master
Changes not staged for commit:
  (use "git add <file>..." to 【update】 what will be committed)  (之前是【include】)
  (use "git checkout -- <file>..." to discard changes in working directory)

	modified:   good.txt (MODIFIED:被修改了)(红色)

no changes added to commit (use "git add" 【and/or】 "git commit -a")
(可以先add再commit,也可以)
(修改文件时:若文件已经tracked,可以git
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值