前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >简单使用Git管理项目

简单使用Git管理项目

作者头像
xcsoft
修改2021-09-29 22:00:48
1.3K2
修改2021-09-29 22:00:48
举报
文章被收录于专栏:星辰日记

这篇文章将会 介绍基本的Git使用 与 远程仓库操作

何为Git

Git是一个优秀的分布式版本控制软件,他可以协助你完成项目开发。

Git可以用于合作开发,且易于合并/比较多人的开发进度。

Git与Svn的区别

Git与Svn都是版本管理控制软件, 相比于Svn,Git是分布式存储的, 更加安全。

Git是按照元数据方式存储,而Svn按照文件。

Git的分支控制有益,这一点比Svn要好很多。

开始使用Git

一般情况下Linux系统都会自带Git,当然你也可以使用Linux自带的apt或yum一键安装,而Windows可能需要自行安装,您可以访问Git官网下载安装: https://git-scm.com/downloads. 本篇文章将会主要一Linux为主进行介绍, Windows基本一致(仅目录习惯可能存在差异)

在下载完毕之后我们可以使用一下命令来设置您的个人信息(告诉Git你是谁):

代码语言:javascript
复制
git config user.name 'username' #设置用户名
git config user.email '[email protected]' #设置邮箱

设置用户名与邮箱不用于身份验证,仅用于标注每一次提交的用户是谁, 建议与远程仓库的邮箱一致.(远程仓库的概念将会在下文介绍)

创建一个仓库 (git init)

我们可以使用以下命令, 来初始化(创建)一个仓库.

代码语言:javascript
复制
git init

在创建完毕之后 会提示 Initialized empty Git repository in XXX 且会在当前目录下创建一个名为 .git 的文件夹.

绑定远程仓库 (git remote)

通常情况下 我们会将本地仓库与远程仓库绑定,用于多人协作或备份. 常见的有Githubgitee. 当然你也可以使用Giteagitlab来搭建自己私有的Git平台.

我们可以使用多种协议来绑定远程仓库(一般建议使用ssh协议):

代码语言:javascript
复制
git remote add [名称] ssh://host/username/repo #使用ssh协议
# 或
git remote add [名称] http(s)://url/username/repo #使用http协议

需要注意: 如果使用ssh协议 需要生成ssh密钥 而 使用 http协议 需要输入用户名与密码来推送与拉取

ssh 密钥 相关知识

使用ssh密钥 需要了解基本的 Linux知识 密钥一般用于 免密登录服务器 或 使用Git 等场景

我们使用命令 ssh-keygen 来迅速创建一个密钥:

代码语言:javascript
复制
➜  test git:(master) ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/xcsoft/.ssh/id_rsa): ./Github_rsa
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in ./Github_rsa
Your public key has been saved in ./Github_rsa.pub
The key fingerprint is:
SHA256:zxEvUsUTTLN/6EXJDHw7RFfTzqcBxNxPurT5ll2/ppI [email protected]
The key's randomart image is:
+---[RSA 3072]----+
|           BB+.o=|
|           .B+=o*|
|          o .ooXo|
|         . o .+==|
|        S o ..o*=|
|         + o .=o.|
|          o . ..=|
|           E   o=|
|            ..oo.|
+----[SHA256]-----+

Enter file in which to save the key (xxx)这里指定了生成文件的目录与名称 比如我这里就将文件保存在了 当前目录下 命名为 Github_rsa

这里的passphrase可以指定该密钥的密码 当然也可以留空,

在创建完密钥后 你可以在你指定的文件夹里找到两个文件,一个为私钥文件,一个为公钥文件(后缀为.pub)

我们可以将公钥内容完整复制到Github后台的Add new SSH key中:

在导入公钥后 我们可以编辑~/.ssh/config(不存在则创建)来制定私钥对应的服务器:

代码语言:javascript
复制
Host ssh.github.com                #别名 
    HostName ssh.github.com        #服务器地址 以Github为例
    User git                       #用户名 指定为git 
    IdentityFile ~/.ssh/Github_rsa #私钥位置

在创建完该文件后, 可以尝试使用命令 ssh -T ssh.github.com来测试是否配置正确.

git remote 相关命令

代码语言:javascript
复制
git remote add [名称] [远程仓库地址] #用于添加远程仓库
git remote remove [名称]           #用于移除远程仓库
git remote rename [旧名称] [新名称] #用于重命名远程仓库

Git 三大分区

Git 一般分为三大区域, 即 工作区 暂存区 版本库 这部分可能对于新手较难理解

图片来源: CSDN用户(GabrielPanda)
图片来源: CSDN用户(GabrielPanda)

工作区 (Working Directory)

工作区是直接编辑的地方,肉眼可见,直接操作。

暂存区(Stage 或 Index)

数据暂时存放的区域. git add操作会将 工作区的改动提交至这里

版本库(commit History)

存放已经提交的数据. git push操作,就是把这个区的数据 push 到远程仓库。

通常下使用Git的流程

  • 通常情况下, 我们在 工作区编辑完文件后,使用以下命令先将文件提交至暂存区
代码语言:javascript
复制
git add <文件>   # 添加指定文件到暂存区
git add <目录>   # 添加指定目录下所有文件 到 暂存区
git add .       # 添加当前目录下所有文件 到 暂存区
  • 当你在工作区删除了文件时, 突然发现暂存区这个文件还在? 这个时候 可以使用:
代码语言:javascript
复制
git rm <文件>      # 从 暂存区和工作区 删除文件
git rm -r <目录>   # 从 暂存区和工作区 删除目录
git rm -rf <目录>  # 从 暂存区和工作区 强制删除目录
# 注意  如果你只想从暂存区删除文件 可以添加参数`--cached`
  • 最后, 将所有文件 从暂存区推送至 版本库
代码语言:javascript
复制
git commit -m "提交说明" # 将文件从暂存区提交至 版本库
  • 如果你觉得这一次的操作 与上一次的操作相关,可以将本次修改推送至上一次的提交
代码语言:javascript
复制
git commit -m "提交说明" --amend
  • 提交完成之后 如果绑定了远程仓库 可以使用
代码语言:javascript
复制
git push <远程仓库名称> <本地分支名称>:<远程分支名称> # 来推送到远程仓库

标签

tag指定了某一次的commit id用于标注,给某次提交加上一个标签 使用以下命令创建一个标签

代码语言:javascript
复制
git tag <标签名称> -m '标签说明' # 创建一个标签

git push <远程仓库> --tags # 将本地标签推送至远程仓库

远程操作

git fetch 常用于更新远程仓库信息

代码语言:javascript
复制
git fetch <远程仓库名称>              # 拉取所有分支
git fetch <远程仓库名称> <远程分支名称> # 拉取指定分支

git pull 常用于拉取远程仓库并合并

代码语言:javascript
复制
git fetch <远程仓库名称> <远程分支名称>:<本地分支名称> # 拉取指定分支与本地指定分支合并
git fetch <远程仓库名称> <远程分支名称>              # 拉取指定分支与 当前 分支合并      

git push 用于 提交版本库至远程仓库

代码语言:javascript
复制
git push <远程仓库名称> <本地分支名称>:<远程分支名称> # 推送到远程仓库

git push <远程仓库名称> :<远程分支名称> # 删除远程仓库指定分支
  • 扩展: git pull 相当于 git fetch + git merge

分支操作

分支可以说是 Git 的精髓 , 很多操作会围绕分支展开 , 对于刚接触Git的用户 可能会难以理解分支操作

git checkout

git checkout 相关命令常用于管理分支

代码语言:javascript
复制
git checkout -b <分支名称> # 用于新建分支 并切换到该分支
git checkout <分支名称>    # 用于切换分支
git checkout <commit id>  # 用于切换到指定的commit id (commit id是使用git后每次提交产生的唯一id)
git checkout tags/<tag>   # 用于切换到指定tag

git checkout 还可以用于从暂存区恢复文件, 或从指定记录/分支恢复文件

代码语言:javascript
复制
git checkout -- <文件路径/名称>             #从暂存区恢复文件
git checkout <分支名称> -- <文件路径/名称>   #从指定分支恢复文件
git checkout <commit id> -- <文件路径/名称> #从指定commit ID恢复文件

git branch

git branch 相关命令 常用于分支操作(与git checkout配合)

代码语言:javascript
复制
git branch <分支名称>      # 用于新建分支
git branch -d <分支名称>   # 用于删除分支
git branch -D <分支名称>   # 用于强制删除分支
git branch -m <旧分支名称> <新分支名称> # 重命名分支
git branch -a   # 查看本地所有分支
git branch -r   # 查看远程所有分支

git merge

git merge 常用与合并分支

  • 我们想象一个场景, 当我们在写一个项目时(通常为dev分支), 遇到某个Bug, 可以创建一个bugFix分支, 来修复这个bug而不影响当前分支, 在修复完毕后, 将bugFix分支合并到dev分支

我们使用以下命令来合并分支

代码语言:javascript
复制
git merge <分支名称>  # 将指定分支 合并到 当前分支 并自动生成提交记录
git merge --no-commit <分支名称> # 将指定分支 合并到 当前分支 但不生成提交记录

比较差异

常使用 git diff 相关命令比较差异

代码语言:javascript
复制
git diff <文件>                         # 比较当前文件和暂存区文件差异 git diff
git diff <commit id1> <commit id2>     # 比较两次提交之间的差异
git diff <分支1> <分支2>                # 比较两个分支的差异
git diff --cached                     # 比较暂存区和版本库差异

冲突解决

在以上分支操作中, 可能不完全一帆风顺, 往往会遇到许多冲突

  • 我们假设一个场景, 你完成了dev分支中index.php的 A 函数, 而你的协作者小明也修改了dev分支中index.php的 A 函数, 小明先将该记录提交至了你们的远程仓库, 这个时候, 你再次提交时 便会发现提交失败(当然你可以强制提交,但不建议)
代码语言:javascript
复制
git pull <远程仓库> <远程分支> # 更新远程分支到本地 并 尝试合并

接下来 会提示 存在冲突的文件

代码语言:javascript
复制
...
Auto-merging index.php
CONFLICT (content): Merge conflict in index.php
Automatic merge failed; fix conflicts and then commit the result.

这个时候你需要手动解决 冲突, 打开冲突文件, 会找到冲突标记 如:

代码语言:javascript
复制
<?php
<<<<<HEAD
    function A () {
        echo 'a';
    }
=====
    function A () {
        echo 'b';
    }
<<<<<< xxxxxxx
  • 在修改完毕后, 留下认为较优或混合:
代码语言:javascript
复制
<?php
    function A () {
        echo 'a';
    }

最后 提交你的修改, 并push到远程仓库

参考

Git三大分区的概念

阮一峰 Git 教程


版权属于:XCSOFT

本文链接:https://cloud.tencent.com/developer/article/1881192

本博客所有原创文章采用CC BY-NC-SA 4.0协议进行许可,转载请注明原文链接。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 何为Git
    • Git与Svn的区别
      • 开始使用Git
        • 创建一个仓库 (git init)
          • 绑定远程仓库 (git remote)
            • ssh 密钥 相关知识
            • git remote 相关命令
          • Git 三大分区
            • 工作区 (Working Directory)
            • 暂存区(Stage 或 Index)
            • 版本库(commit History)
            • 通常下使用Git的流程
          • 标签
            • 远程操作
              • 分支操作
                • git checkout
                • git branch
                • git merge
              • 比较差异
                • 冲突解决
                  • 参考
                  相关产品与服务
                  对象存储
                  对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档