实战"/>
Git原理和命令实战
本文介绍Git原理,核心概念和工作中的命令行实战,将会对Git有较为全面的了解。
Git 与SVN
SVN
SVN属于集中式的版本控制系统,而集中式的版本控制系统都有一个单一的集中管理的服务器,保存所有文件的修订版
本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。
SVN中,每个子目录下都维护着自己的.svn目录,记录着该目录中文件的修改情况以及和服务器端仓库的对应关系。SVN可以checkout部分路径下的内容(部分检出),而不用checkout整个版本库或分支。
本质上SVN的分支和标签都是来自目录拷贝,通常约定是拷贝在 branches/和tags/目录下。所谓分支、tag等概念都只是仓库中不同路径上的一个对象或索引而已。
Git
GIT: 分布式版本控制系统没有“中央服务器”,每个人的电脑上都是一个完整的版本库, 意味着任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。
Git 没有部分检出,并且git的本地仓库信息完全维护在project根目录的.git目录下,(不像svn一样,每个子目录下都有单独的.svn目录)。
Git中的分支实际上仅是一个包含所指对象校验和(40个字符长度SHA-1 哈希值)的文件。Git的分支是完全隔离的,一个提交一般只能发生在一个分支中。
Git核心概念
4个区
相比于SVN等传统的版本管理工具,Git多引入了一个暂存区(Stage)的概念:
• Workspace:工作区,为电脑中实际的目录
• Index / Stage:暂存区,类似于缓存区域,临时保存你的改动。
• Local Repository:仓库区(或本地仓库),在.git目录下。
• Remote Repository:远程仓库。
3个步骤
正常情况下,我们的工作流就是3个步骤:
- git add .把所有文件放入暂存区;
- git commit把所有文件从暂存区提交进本地仓库;
- git push把所有文件从本地仓库推送进远程仓库。
5种状态
Git对应的4个区,进入每一个区成功之后会产生一个状态,再加上最初始的一个状态,一共是5种状态:
- 未修改(Origin)
- 已修改(Modified)&未追踪(Untracked)
- 已暂存(Staged)
- 已提交(Committed)
- 已推送(Pushed)
Git环境搭建实战
-
下载安装Git:根据你的系统选择合适的版本,下载安装包并进行安装。
yum install -y git
,淘宝镜像:/ -
配置用户信息:打开命令行终端,输入以下指令,分别配置用户名和邮箱:
git config --global user.name "Your Name" git config --global user.email "youremail@example"
-
创建本地仓库:在你的本地文件夹中创建一个新文件夹,并cd进入这个文件夹,然后使用以下指令将其初始化为GIT仓库:
git init
-
添加远程仓库:使用以下指令添加远程仓库(如果有的话):
git remote add origin remote_repository_URL
-
创建、编辑、保存、提交文件修改:将文件拷贝到本地仓库目录下,然后使用以下指令将其加入暂存区:
git add file_name
然后使用以下指令将其提交到本地仓库:
git commit -m "Commit message"
-
同步代码到远程仓库:使用以下指令将本地代码同步到远程仓库:
git push origin master
以上信息在远程仓库初次创建时都会出现提示信息,按照步骤操作即可
Git、GitLab、GitHub
Git是一款分布式版本控制工具,用于记录代码的历史版本和管理多人协作开发。
GitLab是一款基于Git的开源在线版本控制系统,它提供了一系列完整的工具,包括源代码管理、代码审查、问题追踪、持续集成和部署等功能。
GitHub则是一个基于Git的代码托管平台,它允许用户将自己的代码上传到互联网上,供其他人查看、下载和使用。除了GitLab的功能以外,GitHub还提供了社交化的功能,如关注、点赞和评论等。
简单来说,Git是版本控制工具,GitLab和GitHub是在Git基础上搭建的在线版本控制平台,GitHub重点在社交化方面。
同一台电脑配置多个git账号
在同一台电脑上配置多个 Git 账号的方法如下:
- 生成新的 ssh 公钥
首先需要生成一对新的 ssh 公钥和私钥,用于认证使用。可以在默认的 ~/.ssh/
目录下生成,或者在生成时指定新的目录。
ssh-keygen -t rsa -C "new_email@example" -f ~/.ssh/id_rsa_personal
命令中 -C
参数是注释,用于说明该 ssh key 是用于哪个账号的。-f
参数指定生成的 ssh key 文件名和路径。
- 配置 ssh
在 ~/.ssh/
目录下创建一个名为 config
的文件,并在其中添加如下配置,其中新生成的 ssh key 对应的 Host 和 IdentityFile 值需要修改成自己的。
# default GitHub account
Host githubHostName githubUser gitIdentityFile ~/.ssh/id_rsa# personal account
Host github-personalHostName githubUser gitIdentityFile ~/.ssh/id_rsa_personal
- 配置 Git
(1)全局设定
在 Git 中设置默认用户名和邮箱地址:
git config --global user.name "your_username"
git config --global user.email "your_email"
(2)针对单个项目
在某个项目的根目录下,执行以下命令:
git config user.name "your_username"
git config user.email "your_email"
- 在本地 clone 仓库
使用新增的 ssh 地址(例如 git@github-personal:username/repo.git
)来 clone 对应账号下的仓库即可。
注意:根据不同的 git 服务商,ssh 地址可能有所不同,需要修改为对应的地址。
Git常用分支方式和适用场景
- 主分支模式(mainstream model):所有的开发者都在一个主分支上共同开发和维护软件。适用于小型团队或个人项目。
- 功能分支模式(feature branch model):每个功能开发都在自己的分支上,等功能开发完成后再由管理员合并到主分支中。适用于多人协作、复杂项目。
- Gitflow工作流:类似于功能分支模式,但是细节更加明确:有master、develop、feature、release、hotfix五种类型的分支,适用于大规模复杂软件开发。
以下是Gitflow工作流常用工作流程。
- 根据需求,从master拉出新分支,不区分功能分支或补丁分支。
- 新分支开发完成后,或者需要讨论的时候,就向master发起一个Pull request(简称PR)。
- Pull Request既是一个通知,让别人注意到你的请求,又是一种对话机制,大家一起评审和讨论你的代码,对你还可以不断提交代码。
- 你的Pull Request被接受,合并进master,重新部署后,原来你拉出来的那个分支就被删除。
Git核心命令总结
命令 | 说明 |
---|---|
git add * | 添加到暂存区 |
git commit -m “commit的信息” | 提交到本地仓库 |
git push | 提交到远端 |
git fetch | 获取远程仓库的更新 |
git pull | 获取远程仓库的更新并直接合并 |
git merge/git rebase | 合并分支到本地分支 |
git init | 旧的git远程连接不用了,建立新的链接可以使用该命令 |
git remote add origin git@github:tianqixin/runoob-git-test.git | 和远端仓库进行关联,先在远端建立一个空的仓库 |
git checkout | 切换分支 |
git rm --cached | 取消在暂存区保存,针对add错的情况 |
git commit --amend | 备注信息要求规范严格,可以通过该命令改备注 |
git log --author | 可以查看提交的信息,也可以到远程仓库去看 |
git remote -v,git remote show origin | 查看远程仓库和本地仓库的关联信息 |
git stash,git stash pop | 突然有新的需求过来,在本地暂时保存起来 git stash pop把之前的恢复了,突然有新需求的时候适合这种情况,可以先stash这个分支的变更,然后切换到新的分支,提交需求之后,恢复到这个分支,然后恢复stash,继续编辑。相比于把文件放到工作区,这样做的好处是方便用git管理。 |
认证 | ssh-keygen -t rsa -C ‘438234767@qq’ -f ~/.ssh/test_rsa,产生ssh方式的密钥,流水线中常用该方式 |
本地计算机与GitHub(或GitLab)进行通信时,传输主要基于两种协议,HTTPS和SSH,对应的仓库地址就是HTTPS URLs和SSH URLs。
1、HTTPS URLs
GitHub官方推荐采用HTTPS URLs的方式,因为该种方式适用面更广(即使在有防火墙或代理的情况下也同样适用),使用更方
便(配置更简单)。
2、SSH URLs
除了HTTPS URLs,还可以采用SSH URLs的方式访问GitHub代码仓库,采用SSH URLs方式之前,需要先在本地计算机中生成SSH keypair(秘钥对,包括私钥和公钥)。默认情况下,生成的秘钥位于$HOME/.ssh/目录中,文件名称分别为id_rsa和id_rsa.pub,通常无需修改,保持默认即可。
工作中有时可能错误提交,这时候撤销的操作可以忙上大忙,以下为常见几种撤销操作:
命令 | 说明 |
---|---|
git reset --hard | 已修改,未暂存/已暂存,未提交 |
git reset --hard HEAD^ | 已提交,未推送 |
git reset --hard HEAD^,git push origin master -f | 已推送,先撤回提交后,在force push撤销后修改的 |
更多推荐
Git原理和命令实战
发布评论