名人说:莫听穿林打叶声,何妨吟啸且徐行。—— 苏轼《定风波·莫听穿林打叶声》
Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder)
学习Git非常有用,主要体现在以下几个方面:
Git可以帮助你有效地管理项目的不同版本。无论是回溯到旧版本、比较版本间的差异,还是修复错误,Git都提供了强大的支持。
在多人协作的项目中,Git是关键的工具。它允许多个开发者同时工作在同一个项目上,而不会互相干扰。通过分支和合并的功能,团队成员可以在不同的特性或修复上独立工作,然后再将他们的工作合并到主项目中。
现代软件开发,特别是敏捷开发和持续集成/持续部署(CI/CD),大量依赖版本控制系统,而Git是最流行的选择之一。掌握Git,可以让你更容易融入现代软件开发的工作流程。
除了上述几个方面以外:
对于软件开发人员来说,掌握Git是一项基本技能。无论是自由职业者、开源项目贡献者,还是寻求加入技术公司,Git都是需要的一部分,它能帮助你更好地管理项目。
总之,无论是个人技能提升,还是作为团队合作和项目管理的必备工具,学习Git都是很有用的。
分布式版本控制(主流)
所有版本信息仓库全部同步到本地的每个用户,这样就可以在本地查看所有版本历史,可以离线在本地提交,只需在连网时push到相应的服务器或其他用户那里。由于每个用户那里保存的都是所有的版本数据,只要有一个用户的设备没有问题就可以恢复所有的数据,但这增加了本地存储空间的占用。
不会因为服务器损坏或者网络问题,造成不能工作的情况,但是缺点在于会存在安全隐患,因为本地所有用户都拥有。
集中式版本控制
所有的版本数据都保存在服务器上,协同开发者从服务器上同步更新或上传自己的修改。所有数据都保存在单一的服务器上,但若服务器损坏,这样就会丢失所有的数据,风险较高,解决方法:可以定期备份,这样可以降低风险。
在使用Git时,可能会用到一些基本的Linux命令,特别是在Linux环境下工作或者使用类Unix系统(如macOS)时。但是需要注意,Git命令和Linux命令是不同的,尽管它们通常在同一个命令行界面中使用,一些基础的Linux命令如下:
(1) cd : 改变目录。
(2) cd .. :回退到上一个目录,直接cd进入默认目录
(3) pwd : 显示当前所在的目录路径。
(4) ls(ll): 都是列出当前目录中的所有文件,只不过ll(两个ll)列出的内容更为详细。
(5) touch : 新建一个文件 如 touch index.js 就会在当前目录下新建一个index.js文件。
(6) rm: 删除一个文件, rm index.js 就会把index.js文件删除。
(7) mkdir: 新建一个目录,就是新建一个文件夹。
(8) rm -r : 删除一个文件夹, rm -r src 删除src目录
rm -rf / 切勿在Linux中尝试!删除电脑中全部文件!
(9) mv : 移动文件, mv index.html src index.html 是我们要移动的文件, src 是目标文件夹,当然, 这样写,必须保证文件和目标文件夹在同一目录下。
(10) reset : 重新初始化终端/清屏。
(11) clear : 清屏。
(12) history : 查看命令历史。
(13) help : 帮助。
(14) exit : 退出。
(15) # : 表示注释
#查看系统配置config
git config --system --list
#查看用户(global)配置
git config --global --list
git config --global user.name "yueliusu" #用户名
git config --global user.email "xxxxxxxxxx@qq.com" #邮箱
Git是一种分布式版本控制系统,它的工作原理可以分为几个关键部分:
工作区(Working Directory):这是你的本地文件夹,用于存放实际的文件。
暂存区(Staging Area):当你对文件进行了修改之后,可以将这些修改添加到暂存区。这个过程通常使用git add
命令完成。暂存区是一个准备好的状态,用于记录文件的下一次提交。
本地仓库(Local Repository):当你执行git commit
操作时,暂存区的更改会被提交到本地仓库。这意味着你的更改被记录在Git的历史中。本地仓库包含了项目的全部历史记录,包括不同的分支和标签。
远程仓库(Remote Repository):这是存储在网络上的版本库,可以与他人共享。通过命令如git push
和git pull
,你可以将本地仓库的更改推送到远程仓库,或者从远程仓库获取最新的更改。
文件在这四个区域之间的转换关系如下:
Git的核心概念是快照。当你提交你的更改时,Git实际上是在记录当前工作区的快照,并且只存储与上一个快照不同的部分(差异)。这种方式使得Git非常高效,不管仓库有多大,检查当前版本的状态总是很快的。
补充(关于快照的理解):
快照可以理解是在执行git commit时,对当前暂存区的情况拍摄的一张“照片“,这个照片中涵盖的若干信息将被存放到git版本库下。
# 在当前目录新建一个Git代码库
$ git init
$git clone https://gitee.com/xxxx/xxxx.git
或
$git clone https://github.com/xxxx/xxxx.git
版本控制就是对文件的版本控制,要对文件进行修改、提交等操作,首先要知道文件当前在什么状态,不然可能会提交了现在还不想提交的文件,或者要提交的文件没提交上。
通过以下命令可以查看文件状态:
#查看指定文件状态
git status [filename]
#查看所有文件状态
git status
# git add . 添加所有文件到暂存区
# git commit -m "消息内容" 提交暂存区中的内容到本地仓库 -m 提交信息
有些时候我们不想把某些文件纳入版本控制中,比如数据库文件,临时文件,设计文件等
在主目录下建立".gitignore"文件,此文件有如下规则:
#为注释
*.txt #忽略所有 .txt结尾的文件,这样的话上传就不会被选中!
!lib.txt #但lib.txt除外
/temp #仅忽略项目根目录下的TODO文件,不包括其它目录temp
build/ #忽略build/目录下的所有文件
doc/*.txt #会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
# 添加指定文件到暂存区
$ git add [file1] [file2] ...
# 添加指定目录到暂存区,包括子目录
$ git add [dir]
# 添加当前目录的所有文件到暂存区
$ git add .
# 添加每个变化前,都会要求确认
# 对于同一个文件的多处变化,可以实现分次提交
$ git add -p
# 删除工作区文件,并且将这次删除放入暂存区
$ git rm [file1] [file2] ...
# 停止追踪指定文件,但该文件会保留在工作区
$ git rm --cached [file]
# 改名文件,并且将这个改名放入暂存区
$ git mv [file-original] [file-renamed]
# 提交暂存区到仓库区
$ git commit -m [message]
# 提交暂存区的指定文件到仓库区
$ git commit [file1] [file2] ... -m [message]
# 提交工作区自上次commit之后的变化,直接到仓库区
$ git commit -a
# 提交时显示所有diff信息
$ git commit -v
# 使用一次新的commit,替代上一次提交
# 如果代码没有任何新变化,则用来改写上一次commit的提交信息
$ git commit --amend -m [message]
# 重做上一次commit,并包括指定文件的新变化
$ git commit --amend [file1] [file2] ...
分支(Branch)在GIT中相对较难,分支就好比一条条的溪流。不过,在某个时间点,两个溪流汇合,可能就成为了一条河流,我们就需要处理一些河道等问题了。在汇合之前,它们是独立的工作流,允许你在不影响主线(通常是master或main分支)的情况下,开发新功能或修复bug。
# 列出所有本地分支
git branch
# 列出所有远程分支
git branch -r
# 新建一个分支,但依然停留在当前分支
git branch [branch-name]
# 新建一个分支,并切换到该分支
git checkout -b [branch]
# 合并指定分支到当前分支
$ git merge [branch]
# 删除分支
$ git branch -d [branch-name]
# 删除远程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]
如果同一个文件在合并分支时都被修改了则会引起冲突:解决的办法是我们可以修改冲突文件后重新提交,选择要保留他的代码还是你的代码。master/main主分支可以用来发布新版本,一般情况下不允许在上面进行工作,工作一般情况下在新建的dev分支上工作,工作完后,比如上要发布,或者说dev分支代码稳定后可以合并到主分支master/main上来。
Git中的合并(Merge)和变基(Rebase)可以用来处理分支间差异,具体如下:
合并(Merge):合并是将一个分支的更改合并到另一个分支的过程。在合并时,Git会尝试自动结合两个分支的更改。如果不同分支对同一个文件的同一部分做了更改,就可能出现冲突,这时需要手动解决冲突后再完成合并操作。合并操作通常保留了两个分支的历史,会在历史记录中创建一个新的合并提交(merge commit)。
变基(Rebase):变基是另一种整合不同分支更改的方法。通过变基,可以将一个分支上的更改“重新播放”在另一个分支的顶部。这通常用于保持一个线性的项目历史,因为它可以避免合并提交的生成。但是,变基会改变历史,所以不推荐在共享的分支上使用变基,以免造成混乱。
总的来说,合并和变基都是处理分支间差异的强大工具,但它们的使用方式和目的略有不同。合并适用于保留完整历史记录的情况,而变基适用于创建一个干净、直线式的历史记录。在实际应用中,选择哪一种方式取决于具体的项目需求和团队工作流程。
代码托管平台是一种网络服务,它允许开发者和团队存储、管理、跟踪和协作开发项目的源代码。这些平台通常提供以下核心功能:
版本控制:支持如Git等版本控制系统,帮助开发者管理代码的历史版本,轻松实现版本回退、分支合并等操作。
协作工具:提供Issue跟踪、代码审查、项目Wiki等工具,以促进团队协作和信息共享。
安全性与访问控制:通过权限设置确保代码安全,只有授权用户才能访问或修改代码。
集成服务:往往与其他开发工具或第三方服务集成,如持续集成(CI)、持续部署(CD)工具。
云存储:代码存储在云端,可从任何地方访问。
常见的代码托管平台包括GitHub、GitLab、Bitbucket和国内的Gitee(码云)等。这些平台大大简化了软件开发流程,尤其是对于团队协作和开源项目来说至关重要。
接下来重点介绍一下Github和Gitee。
1??Gitee
2??Github
3??Gitee和Github的区别
Gitee 和 GitHub 都是代码托管平台,但它们各自有一些区别:
所有权与位置:
访问速度:
社区与用户群体:
功能与界面:
To be continued…
笔记参考资料如下:
①狂神说Git(B站)
②Git大全
③《Pro Git》书籍第二版,作者:Scott Chacon, Ben Straub等
Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder)
点赞加关注,收藏不迷路!本篇文章对你有帮助的话,还请多多点赞支持!