DevOps 之 Code 阶段工具 Git

2023-10-27

代码编写阶段,我们需要将不同版本的代码存储到一个仓库中,大多数企业采用的版本控制系统就是 git 或者 svn,相比之下, git 作为版本控制系统居多,而远程仓库,GitLab 也是大多数企业的首先,因为它开源且活跃。

Git、Github、Gitlab 的区别

  • Git:开源的分布式版本控制系统,是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件,据说只用了7天时间写出来的
  • Github:基于 Git 的代码托管服务,是在线的,提供付费和免费,区别在于只有付费的才可以创建私有的代码仓库,不过现在都是免费了,之前是收费的
  • GitLab:代码托管平台,功能和 Github 差不多,是完全免费的开源软件,按照MIT许可证分发,支持本地部署

Git、SVN 的区别

  1. Git 是分布式的,SVN 不是:Git 和其它非分布式的版本控制系统(SVN、CVS)等,最核心的区别

  2. Git 把内容按元数据方式存储,而 SVN 是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里

  3. Git 分支和 SVN 的分支不同:分支在 SVN 中一点不特别,就是版本库中的另外的一个目录

  4. Git 没有一个全局的版本号,而 SVN 有:目前为止这是跟 SVN 相比 GIit 缺少的最大的一个特征

  5. Git 的内容完整性要优于 SVN:Git 的内容存储使用的是 SHA-1哈希算法,这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏

  6. Git 是分布式的版本控制器 没有客户端和服务器端的概念

  7. SVN 它是 C/S 结构的版本控制器,有客户端和服务器端的概念,服务器宕机对版本库的破坏性比较大

Git 的安装(一)

在 DevOps 的 Code 阶段,作为编码,我们一般会在 windows 环境下进行一个代码版本控制,所以这里作为在 windows 下安装 Git 作为一个演示

git 官网

Git (git-scm.com)

下载 windows 安装包

在这里插入图片描述

在这里插入图片描述

打开安装包安装即可

在这里插入图片描述

在这里插入图片描述

Git 的安装(二)

Git 官方网站上有在各种 Unix 发行版的系统上安装步骤,网址:https://git-scm.com/download/linux

Centos7 安装 Git

使用第三方存储库IUS来安装更新版本的git

第一步:安装第三方存储库 IUS

curl https://setup.ius.io | sh

在这里插入图片描述

第二步:开启 IUS 存储库

sed -i 's/enabled = 0/enabled = 1/g' ius-archive.repo

第三步:安装 Git

yum -y install git2u

在这里插入图片描述

第四步:验证 Git 版本

git --version

在这里插入图片描述

Git 的基础配置

初次运行 Git 前的配置说明

git config 工具来控制 Git 外观和行为的配置变量,这些变量存储在三个不同的位置:

  • /etc/gitconfig 文件: 包含系统上每一个用户及他们仓库的通用配置。 如果在执行 git config 时带上 --system 选项,那么它就会读写该文件中的配置变量。 (由于它是系统配置文件,因此你需要管理员或超级用户权限来修改它。)
  • ~/.gitconfig 或 ~/.config/git/config 文件:只针对当前用户。 你可以传递 --global 选项让 Git 读写此文件,这会对你系统上所有的仓库生效。
  • 当前使用仓库的 Git 目录中的 config 文件(即 .git/config):针对该仓库。 你可以传递 --local 选项让 Git 强制读写此文件,虽然默认情况下用的就是它。(当然,你需要进入某个 Git 仓库中才能让该选项生效。)

可以通过git config --list --show-origin 命令查看所有的配置以及它们所在的文件

在这里插入图片描述

windwos 自动安装的默认路径:

在这里插入图片描述

用户信息

安装完 Git 之后,首要的需要设置用户名和邮箱,每一个 Git 提交都会使用这些信息

# 如果使用了 --global 选项,那么该命令只需要运行一次,因为之后无论你在该系统上做任何事情, Git 都会使用那些信息。 当你想针对特定项目使用不同的用户名称与邮件地址时,可以在那个项目目录下运行没有 --global 选项的命令来配置
git config --global user.name "yunmx"
git config --global user.email 565616251@qq.com

在这里插入图片描述

在这里插入图片描述

对于不同的项目目录,我们可以不使用–global选项的命令来配置:

# 创建一个文件夹来测试
# 初始化Git
# 配置用户名信息
git init
git config user.name "yunmx2"
git config user.email yunmx2@qq.com
# 查看对应项目文件夹下的.git/config文件就能看到相关信息了

在这里插入图片描述

Git 的简单演示

新建一个项目文件夹并进入

在这里插入图片描述

右键空白处选择:Git Bash Here

在这里插入图片描述

操作和 linux 下的文件操作一样

在这里插入图片描述

初始化一个项目文件夹:git init

在这里插入图片描述

单独为这个项目设置基本信息

git config user.name “whale”
git config user.email 565616254@qq.com

在这里插入图片描述

Git 工作流程

一般工作流程如下:

  • 克隆 Git 资源作为工作目录副本
  • 在目录副本上添加或修改文件。
  • 如果其他人修改了,你可以更新资源
  • 在提交前查看修改
  • 提交修改
  • 在修改完成后,如果发现错误,可以撤回提交并再次修改并提交

在这里插入图片描述

Git 工作概念

  • **工作区:**就是你在电脑里能看到的目录。

  • **暂存区:**英文叫 stage, 或 index。一般存放在"git目录"下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。

  • **版本库:**工作区有一个隐藏目录.git,这个不算工作区,而是 Git 的版本库。

  • 工作区、版本库中的暂存区和版本库之间的关系的示意图:

在这里插入图片描述

  • 上图中左侧为工作区,右侧为版本库。在版本库中标记为 “index” 的区域是暂存区(stage, index),标记为 “master” 的是 master 分支所代表的目录树。

  • 此时 “HEAD” 实际是指向 master 分支的一个"游标"。所以图示的命令中出现 HEAD 的地方可以用 master 来替换。

  • 图中的 objects 标识的区域为 Git 的对象库,实际位于 “.git/objects” 目录下,里面包含了创建的各种对象及内容。

  • 当对工作区修改(或新增)的文件执行 “git add” 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。

  • 当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。

  • 当执行 “git reset HEAD” 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。

  • 当执行 “git rm --cached ” 命令时,会直接从暂存区删除文件,工作区则不做出改变。

  • 当执行 “git checkout .” 或者 “git checkout – ” 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。

  • 当执行 “git checkout HEAD .” 或者 “git checkout HEAD ” 命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。

Git 常用命令演示

创建版本库

  • 隐藏文件夹 git 目录是 Git 用来跟踪管理版本的,不要乱动这个文件夹,可能会因为操作不当破坏版本仓库的
[root@vm-99 demo2]# git init
已初始化空的 Git 仓库于 /home/git-demo/demo2/.git/
[root@vm-99 demo2]# ls -a
.  ..  .git
[root@vm-99 demo2]#

添加文件到暂存区

[root@vm-99 demo2]# vim test.md
[root@vm-99 demo2]# cat test.md
# HEAD1


[root@vm-99 demo2]# git add test.md
[root@vm-99 demo2]# git status
位于分支 master

尚无提交

要提交的变更:
  (使用 "git rm --cached <文件>..." 以取消暂存)

        新文件:   test.md

[root@vm-99 demo2]#

提交到本地仓库

[root@vm-99 demo2]# git commit -m "first commit"
[master(根提交) 0dea6e4] first commit
 1 file changed, 3 insertions(+)
 create mode 100644 test.md
[root@vm-99 demo2]#

查看是否有文件可提交到暂存区

[root@vm-99 demo2]# git status
位于分支 master
无文件要提交,干净的工作区
[root@vm-99 demo2]# vim test.md
[root@vm-99 demo2]# git status
位于分支 master
尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)

        修改:     test.md

修改尚未加入提交(使用 "git add" 和/或 "git commit -a"[root@vm-99 demo2]#

比较文件内容

[root@vm-99 demo2]# git diff test.md
diff --git a/test.md b/test.md
index e2c87fb..46a5696 100644
--- a/test.md
+++ b/test.md
@@ -1,3 +1,3 @@
 # HEAD1

-
+## Head2
[root@vm-99 demo2]#

查看历史记录

从最近到最远的显示日志

[root@vm-99 demo2]# git log
commit 108f8bbe8c93f6004cc360ca64e62be6377acaba (HEAD -> master)
Author: demo1 <565616251@qq.com>
Date:   Sun Sep 18 09:51:23 2022 +0800

    second commit

commit 0dea6e426ff630dad2cacc7ff3f6492f6d29c5e5
Author: demo1 <565616251@qq.com>
Date:   Sun Sep 18 09:47:53 2022 +0800

    first commit
[root@vm-99 demo2]# git log --pretty=oneline
108f8bbe8c93f6004cc360ca64e62be6377acaba (HEAD -> master) second commit
0dea6e426ff630dad2cacc7ff3f6492f6d29c5e5 first commit
[root@vm-99 demo2]#

回退版本

[root@vm-99 demo2]# cat test.md
# HEAD1

## Head2
[root@vm-99 demo2]# git log --pretty=oneline
108f8bbe8c93f6004cc360ca64e62be6377acaba (HEAD -> master) second commit
0dea6e426ff630dad2cacc7ff3f6492f6d29c5e5 first commit
[root@vm-99 demo2]# git reset --hard HEAD~1
HEAD 现在位于 0dea6e4 first commit
[root@vm-99 demo2]# cat test.md
# HEAD1


[root@vm-99 demo2]# git reflog
0dea6e4 (HEAD -> master) HEAD@{0}: reset: moving to HEAD~1
108f8bb HEAD@{1}: commit: second commit
0dea6e4 (HEAD -> master) HEAD@{2}: commit (initial): first commit
[root@vm-99 demo2]# git reset --hard 108f8bb
HEAD 现在位于 108f8bb second commit
[root@vm-99 demo2]# cat test.md
# HEAD1

## Head2
[root@vm-99 demo2]#

撤销修改

#########未提交到暂存区#########
#########1.可以回退到上一个版本#########
#########2.或者手动修改回内容#########
#########3.可以git checkout#########
[root@vm-99 demo2]# git status
位于分支 master
无文件要提交,干净的工作区
[root@vm-99 demo2]# vim test.md
[root@vm-99 demo2]# cat test.md
# HEAD1

## Head2

### Head3
[root@vm-99 demo2]# git status
位于分支 master
尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)

        修改:     test.md

修改尚未加入提交(使用 "git add" 和/或 "git commit -a"[root@vm-99 demo2]# git checkout -- test.md
[root@vm-99 demo2]# cat test.md
# HEAD1

## Head2
[root@vm-99 demo2]# git status
位于分支 master
无文件要提交,干净的工作区
[root@vm-99 demo2]#

删除文件

[root@vm-99 demo2]# ls
su.info  test.md
[root@vm-99 demo2]# rm su.info
rm:是否删除普通文件 "su.info"?y
[root@vm-99 demo2]# git status
位于分支 master
尚未暂存以备提交的变更:
  (使用 "git add/rm <文件>..." 更新要提交的内容)
  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)

        删除:     su.info

修改尚未加入提交(使用 "git add" 和/或 "git commit -a"[root@vm-99 demo2]# git add su.info
[root@vm-99 demo2]# git commit -m "fourth commit"
[master 4e95e9b] fourth commit
 1 file changed, 1 deletion(-)
 delete mode 100644 su.info
[root@vm-99 demo2]#
[root@vm-99 demo2]# git reflog
4e95e9b (HEAD -> master) HEAD@{0}: commit: fourth commit
081bad8 HEAD@{1}: commit: third commit
108f8bb HEAD@{2}: reset: moving to 108f8bb
0dea6e4 HEAD@{3}: reset: moving to HEAD~1
108f8bb HEAD@{4}: commit: second commit
0dea6e4 HEAD@{5}: commit (initial): first commit
[root@vm-99 demo2]# git reflog
4e95e9b (HEAD -> master) HEAD@{0}: commit: fourth commit
081bad8 HEAD@{1}: commit: third commit
108f8bb HEAD@{2}: reset: moving to 108f8bb
0dea6e4 HEAD@{3}: reset: moving to HEAD~1
108f8bb HEAD@{4}: commit: second commit
0dea6e4 HEAD@{5}: commit (initial): first commit
[root@vm-99 demo2]# git reset --hard 081bad8
HEAD 现在位于 081bad8 third commit
[root@vm-99 demo2]#
[root@vm-99 demo2]# ls
su.info  test.md
[root@vm-99 demo2]# cat su.info
This is a summary message!
[root@vm-99 demo2]#

远程仓库

演示“github"

【登录 github】-【新建空仓库】

在这里插入图片描述

【设置公钥】

在这里插入图片描述

本地推送

[root@vm-99 demo2]# git remote add origin git@github.com:yunmx/demo2.git
[root@vm-99 demo2]# git push -u origin main
error: src refspec main does not match any.
error: 无法推送一些引用到 'git@github.com:yunmx/demo2.git'
[root@vm-99 demo2]# git push -u origin master
The authenticity of host 'github.com (20.205.243.166)' can't be established.
ECDSA key fingerprint is SHA256:p2QAMXNIC1TJYWeIOttrVc98/R1BUFWu3/LiyKgUfQM.
ECDSA key fingerprint is MD5:7b:99:81:1e:4c:91:a5:0d:5a:2e:2e:80:13:3f:24:ca.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,20.205.243.166' (ECDSA) to the list of known hosts.
对象计数中: 4, 完成.
Delta compression using up to 12 threads.
压缩对象中: 100% (2/2), 完成.
写入对象中: 100% (4/4), 287 bytes | 287.00 KiB/s, 完成.
Total 4 (delta 0), reused 0 (delta 0)
To github.com:yunmx/demo2.git
 * [new branch]      master -> master
分支 'master' 设置为跟踪来自 'origin' 的远程分支 'master'。
[root@vm-99 demo2]#

查看 git 远程仓库

在这里插入图片描述

修改内容后再次推送一次

[root@vm-99 demo2]# vim su.info
[root@vm-99 demo2]# git status
位于分支 master
您的分支与上游分支 'origin/master' 一致。

尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)

        修改:     su.info

修改尚未加入提交(使用 "git add" 和/或 "git commit -a"[root@vm-99 demo2]# git commit -a -m "second commit"
[master 08fbfdd] second commit
 1 file changed, 1 insertion(+)
[root@vm-99 demo2]# git push origin master
对象计数中: 3, 完成.
Delta compression using up to 12 threads.
压缩对象中: 100% (3/3), 完成.
写入对象中: 100% (3/3), 290 bytes | 290.00 KiB/s, 完成.
Total 3 (delta 0), reused 0 (delta 0)
To github.com:yunmx/demo2.git
   0fd4cb2..08fbfdd  master -> master
[root@vm-99 demo2]#

在这里插入图片描述

在这里插入图片描述

克隆远程仓库

在这里插入图片描述

[root@vm-99 opt]# git clone git@github.com:yunmx/demo2.git
正克隆到 'demo2'...
remote: Enumerating objects: 7, done.
remote: Counting objects: 100% (7/7), done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 7 (delta 0), reused 7 (delta 0), pack-reused 0
接收对象中: 100% (7/7), 完成.
[root@vm-99 opt]# cd demo2/
[root@vm-99 demo2]# git reflog
08fbfdd (HEAD -> master, origin/master, origin/HEAD) HEAD@{0}: clone: from git@github.com:yunmx/demo2.git
[root@vm-99 demo2]#

分支的创建与合并

创建分支并切换使用

[root@vm-99 demo2]# ls -a
.  ..  .git  su.info  test.md
[root@vm-99 demo2]# git checkout -b branch1
切换到一个新分支 'branch1'
[root@vm-99 demo2]# git branch
* branch1
  master
[root@vm-99 demo2]#

在分支上修改文件内容

[root@vm-99 demo2]# vim su.info
[root@vm-99 demo2]# cat su.info
This is a summary message!
This is a summary message!
This is a summary message!
[root@vm-99 demo2]#

提交到分支

[root@vm-99 demo2]# git add su.info
[root@vm-99 demo2]# git commit -m "first commit to branch"
[branch1 fce1b35] first commit to branch
 1 file changed, 1 insertion(+)
[root@vm-99 demo2]#

切换到master后查看分支修改的内容

[root@vm-99 demo2]# git checkout master
切换到分支 'master'
您的分支与上游分支 'origin/master' 一致。
[root@vm-99 demo2]# git branch
  branch1
* master
[root@vm-99 demo2]# cat su.info
This is a summary message!
This is a summary message!
[root@vm-99 demo2]#

分支内容合并到master

[root@vm-99 demo2]# git merge branch1
更新 08fbfdd..fce1b35
Fast-forward
 su.info | 1 +
 1 file changed, 1 insertion(+)
[root@vm-99 demo2]# cat su.info
This is a summary message!
This is a summary message!
This is a summary message!
[root@vm-99 demo2]#

删除分支

[root@vm-99 demo2]# git branch -d branch1
已删除分支 branch1(曾为 fce1b35)。
[root@vm-99 demo2]# cat su.info
This is a summary message!
This is a summary message!
This is a summary message!
[root@vm-99 demo2]#

分支冲突

创建一个分支

[root@vm-99 demo2]# git checkout -b branch1
切换到一个新分支 'branch1'
[root@vm-99 demo2]# git branch
* branch1
  master
[root@vm-99 demo2]#

分支下修改一个文件的内容

[root@vm-99 demo2]# vim su.info
[root@vm-99 demo2]# git add su.info
[root@vm-99 demo2]# git commit -m "commit to branch1"
[branch1 c55a0b0] commit to branch1
 1 file changed, 1 insertion(+), 1 deletion(-)
[root@vm-99 demo2]#

切换到master 并修改文件内容

[root@vm-99 demo2]# git checkout master
切换到分支 'master'
您的分支领先 'origin/master'7 个提交。
  (使用 "git push" 来发布您的本地提交)
[root@vm-99 demo2]# vim su.info
[root@vm-99 demo2]# git add su.info
[root@vm-99 demo2]# git commit -m "commit to master"
[master 5b7f0a5] commit to master
 1 file changed, 1 insertion(+), 1 deletion(-)
[root@vm-99 demo2]#

合并分支

[root@vm-99 demo2]# git merge branch1
自动合并 su.info
冲突(内容):合并冲突于 su.info
自动合并失败,修正冲突然后提交修正的结果。
[root@vm-99 demo2]#

分析分支冲突

[root@vm-99 demo2]# git status
位于分支 master
您的分支领先 'origin/master'8 个提交。
  (使用 "git push" 来发布您的本地提交)

您有尚未合并的路径。
  (解决冲突并运行 "git commit")
  (使用 "git merge --abort" 终止合并)

未合并的路径:
  (使用 "git add <文件>..." 标记解决方案)

        双方修改:   su.info

修改尚未加入提交(使用 "git add" 和/或 "git commit -a"[root@vm-99 demo2]#

查看冲突文件内容

Git 用<<<<<<<,=======,>>>>>>> 标记出不同分支的内容

[root@vm-99 demo2]# cat su.info
This is a summary message!
This is a summary message!
This is a summary message!
This is a summary message!
<<<<<<< HEAD
This is a b  summary message!
=======
This is a  a summary message!
>>>>>>> branch1
[root@vm-99 demo2]#

修改后再合并

分支下修改成和mster一样的文件内容再进行合并

Bug 分支的使用

Git 提供了一个 stash 功能,可以把当前工作现场 ”隐藏起来”,等以后恢复现场后继续工作,这样就可以实现临时 Bug 分支的场景使用

现在我在一个分支下工作,且有内容未提交

现在也没法提交,因为这个分支有很多东西没完成

[root@vm-99 demo2]# git branch
* master
[root@vm-99 demo2]# git checkout -b demo1
切换到一个新分支 'demo1'
[root@vm-99 demo2]# git branch
* demo1
  master
[root@vm-99 demo2]# vim test.md
[root@vm-99 demo2]# git status
位于分支 demo1
尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)

        修改:     test.md

修改尚未加入提交(使用 "git add" 和/或 "git commit -a"[root@vm-99 demo2]#

可以将当前工作情况隐藏起来

隐藏起来以后,我们就可以新建一个bug分支,完成后可以就行分支合并,然后删除为修复Bug而创建的临时分支

[root@vm-99 demo2]# git stash
保存工作目录和索引状态 WIP on demo1: 1714188 test
[root@vm-99 demo2]# git  status
位于分支 demo1
无文件要提交,干净的工作区
[root@vm-99 demo2]#

查看隐藏的工作区并恢复

[root@vm-99 demo2]# git stash list
stash@{0}: WIP on demo1: 1714188 test
[root@vm-99 demo2]#
[root@vm-99 demo2]# git stash apply
位于分支 demo1
尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)

        修改:     test.md

修改尚未加入提交(使用 "git add" 和/或 "git commit -a"[root@vm-99 demo2]# git status
位于分支 demo1
尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)

        修改:     test.md

修改尚未加入提交(使用 "git add" 和/或 "git commit -a"[root@vm-99 demo2]#

查看是否和建立临时分区之前是否一致

多人协作

工作模式一般是这样的:

  • 首先,可以试图用 git push origin branch-name 推送自己的修改
  • 如果推送失败,则因为远程分支比你的本地更新早,需要先用 git pull 试图合并
  • 如果合并有冲突,则需要解决冲突,并在本地提交。再用 git push origin branch-name 推送
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DevOps 之 Code 阶段工具 Git 的相关文章

  • 如何仅对最新合并后的提交进行变基?

    考虑以下场景 我从master那里检查了一个分支 我做了一些承诺 我合并了更新的master 我做了更多的承诺 现在我想要从第 4 点开始变基提交 以便从第 2 点开始的提交不受影响 所以如果我最初有 1 2 x x x x x x x m
  • 测量大型源树中的“接近度”

    作为我之前提出的问题的一部分找到两个来源之间的最佳匹配 https stackoverflow com questions 13898659 finding what git commit some code spawned from 其中
  • 如何使用 vim 作为“git log”编辑器?

    当我跑步时git log 编辑器到底是什么git log正在使用 Also 无论如何我可以使用吗vim作为我的默认编辑器git log 如果我想搜索 git 日志 最好的方法是什么 现在我正在做类似的事情 git log grep bla
  • git:检查标签,修改某些内容,然后再次标记它

    我觉得我应该知道这一点 但我很困惑 我在 github 上分叉了一个存储库 我需要的是签出一个标签 称为 v1 0 5 修改文件上的语句 使用名为 1 0 5 的新标签 不带 v 重新标记该状态 然后执行对 master 进行同样的更改 让
  • GIT 中的 Fastlane 应用程序文件?如何检索当前的 apple_id?

    我为我的 XCode 项目设置了 Fastlane 来实现构建自动化 至少 Fastfile 包含构建选项 应该位于 GIT 中 但我也很高兴 Appfile 团队标识符 也位于 GIT 中 主要问题 Appfile 应该包含我的 appl
  • Git 将开发分支与生产版本的主分支合并

    我正在使用 Git 进行代码版本控制 我有一个开发分支 我正在其中进行所有肮脏的开发 每次我向世界发布生产版本时 我都想将其放在我的 master 分支下 问题是 每当我合并开发和 master 时 master 都会收到所有开发历史记录
  • 无法从 Git 扩展向 GitHub 进行身份验证?

    我只是在 Visual Studio 2010 中设置 Git 扩展 但无法真正使其工作 我无法进行身份验证 在 Git Extensions 中 如果我选择 Plugins gt GitHub 我可以添加用户 密码 API 令牌并选择 S
  • Git 会删除空文件夹吗? [复制]

    这个问题在这里已经有答案了 我已提交一个项目并将其推送到我的 GitHub 帐户 该项目包含以下部分文件结构 server conf some files java lib java 和 lib 文件夹为空 从 GitHub 下载我的项目时
  • 如何使用 PyGithub 创建新存储库

    如何使用 PyGithub 在 Github 上创建新的存储库 我特别想知道如何使用create repo http jacquev6 net PyGithub v1 github objects AuthenticatedUser htm
  • github Diff 截断错误

    在 github 中发出拉取请求并审查更改时 我们收到了 Diff Truncated 错误 如下所示 任何人都可以帮助解决这个问题 拉取请求可能会触发以下提到的限制之一GitHub 支持 https stackoverflow com a
  • 无法从另一台计算机访问 git 分支

    基本上我看不到另一台计算机上的分支 我跑 git branch a 在家用电脑上我得到 C learn ror sample app filling in layout gt git branch a filling in layout m
  • 使用 SourceTree 克隆存储库

    有人可以给我一个简单的使用 SourceTree 克隆存储库的快速演练吗 在书签中 我单击克隆存储库 对于源路径 我粘贴如下所示的 URL 电子邮件受保护 cdn cgi l email protection 客户端 应用程序名称 ios
  • 从 Eclipse 的历史视图中删除 ORIG_HEAD 和 FETCH_HEAD

    我最近开始使用 Eclipse Kepler 和 EGit 插件 这些分支不是我习惯的 有没有办法永久阻止这些分支的创建 我尝试手动删除它们 但它不起作用 并且我不想在下次获取或变基时保留它们 据我从对您问题的评论中了解到 您只希望这些参考
  • 如何列出未推送的 Git 提交(本地但不在源上)

    如何查看我所做的 尚未推送到远程存储库的任何本地提交 偶尔 git status将打印出我的分支是X提交之前origin master 但不总是 这是我安装的 Git 的错误 还是我遗漏了什么 这给出了 origin master 和 HE
  • 名称和电子邮件在 Git 的每用户配置文件中设置,但 Git 仍使用默认生成的名称和电子邮件

    标题已经说了 但我会更彻底地解释一下 我已使用以下命令按照建议配置了用户名和电子邮件 git config global user name git config global user email 我可以通过执行以下操作来验证这是设置的g
  • 使用 Git 在线使用 TFS 的 Visual Studio 2013:自动保存文件签入

    我目前正在将 Visual Studio Premium 2013 Update 3 与 Team Foundation Server Online 结合使用并使用 Git 存储库 直到最近 我已经成功使用 Git Repo 几个月了 现在
  • git update-index --no-assume-unchanged 不起作用

    我设置了assume unchanged咬了几个文件 现在我想取消它们 但这不起作用 gt git update index no assume unchanged Gemfile gt git ls files v grep Gemfil
  • git 的精简包是什么?

    我还没有找到太多关于瘦包的信息 并且手册页的信息对此相当含糊 我知道这与连接速度慢有关 但是什么是 连接速度慢 它的优点和缺点是什么 什么时候应该使用它 什么时候不应该使用它 根据记录 手册页 index pack https www gi
  • 如何防止克隆我的 github 存储库?

    我正在尝试找到一种方法来防止从 github 存储库克隆 例如 我有一个私有存储库 有些人在该存储库中工作 在公司计算机中 团队中的每个人都设置了授权级别 当我在 github 上为某个用户设置授权时 该存储库可在他 她自己的 github
  • 将主分支的提交合并到另一个分支,但不合并两个分支

    我有 git 存储库和一个主分支 我决定开发新功能 并且创建了新分支 new branch 我已经在 new branch 中创建了一些提交 但我还没有完成新功能 我决定修复 master 分支中的一些错误 因此我切换到 master 分支

随机推荐

  • Golang空结构体struct{}的作用是什么?

    文章目录 占位符 通道标识 键集合 内存占用优化 总结 在Go语言中 空结构体 struct 是一种特殊的数据类型 它不占用任何内存空间 空结构体没有任何字段 也没有任何方法 尽管它看起来没有实际的用途 但在编程中确实有一些常见的应用场景
  • Handler dispatch failed; nested exception is java.lang.NoSuchMethodError

    一 问题描述 1 报错 org springframework web util NestedServletException Handler dispatch failed nested exception is java lang No
  • 清华智能体宇宙火了,AI模拟“囚徒困境”等实验只需几行简单配置

    丰色 发自 凹非寺量子位 公众号 QbitAI 可以轻松模拟社会实验的多智能体宇宙来了 它由清华大学联合北邮 微信团队推出 目前已在GitHub揽获1 1k标星 名字简单粗暴 就叫 AgentVerse 划重点 这个环境专门针对大语言模型开
  • 蓝桥杯试题 入门训练 Fibonacci数列 C、C++

    蓝桥杯试题 入门训练 Fibonacci数列 C C 问题描述 Fibonacci数列的递推公式为 Fn Fn 1 Fn 2 其中F1 F2 1 当n比较大时 Fn也非常大 现在我们想知道 Fn除以10007的余数是多少 输入格式 输入包含
  • SpringBoot 日志信息输出

    今天启动SpringBoot项目发现 大于许多日志信息 但是大部分提示是 那些注解类没有被使用 日志输出信息如下 CodecsAutoConfiguration matched ConditionalOnClass found requir
  • [echarts]横向柱状图的两种简便画法

    示例图 第一种方法 可以随意控制y左轴和y右轴的显示位置 let option 柱状图的位置 grid left 0 right 0 bottom 0 top 0 containLabel false 图表两侧是否留白 dataZoom t
  • [ C++ ] — 结构体和共用体

    一 C 中的结构体 1 声明 声明的过程不分配内存 struct Box char name 10 double length double width double height 声明的同时实例化 实例化要分配内存 struct Box
  • 磁盘性能指标—IOPS、吞吐量及测试

    磁盘性能指标 IOPS 吞吐量及测试 IOPS 吞吐量 磁盘服务时间 最大IOPS的理论计算方法 IOPS Input Output Per Second 即每秒的输入输出量 或读写次数 是衡量磁盘性能的主要指标之一 IOPS是指单位时间内
  • 算法设计与分析(第二版)上机实验题——C语言实现

    算法设计与分析 第一章 实验1 统计求最大 最小元素的平均比较次数 实验2 求无序序列中第k小的元素 实验3 出队第k个元素 实验4 设计一种好的数据结构 实验5 设计一种好的数据结构 第二章 实验1 逆置单链表 实验2 判断两棵二叉树是否
  • window onresize事件注意一下效率问题

    最近好久没有发帖了 今天在写 vue 项目的时候 echarts 图标需要随着 窗口变化适配 在使用 onresize 的时候 延时器代码不会写了 这里再记录下 代码如下 mounted 添加 echarts 窗口变化 事件 side me
  • STM32的“GPU”——DMA2D实例详解

    来源 本文由RT Thread社区成员梦千年撰写 点击文末阅读原文可查看出处 前言 GPU即图形处理器 是现代显卡的核心 在没有GPU的时代 所有图形的绘制都是由CPU来完成的 CPU需要计算图形的边界 颜色等数据 并且负责将数据写入显存
  • STM32中断清除标志位后无法再次进入中断问题及解决方案

    USART清除中断标志位问题 在调用USART ClearITPendingBit 函数清除中断标志位的时候 会导致下一次中断无法进入 例如以下程序 错误案例 void USART1 IRQHandler if USART GetITSta
  • 001:goodcopy

    编写GoodCopy类模板 使得程序按指定方式输出 include using namespace std template struct GoodCopy 在此处补充你的代码 int a 200 int b 200 string c 20
  • Air Playit - 直接在手机上通过WiFi无线播放电脑上的海量高清电影视频 (免费跨平台看片神器)

    http www iplaysoft com airplayit html 很多人都会下载一些电视剧 电影等视频放在电脑上 然而 有时别人在用你电脑或自己懒懒地躺在沙发上的时候 却想着要是能直接在手机上无线播放电脑上的电影视频MV神马的那该
  • 【老生谈算法】matlab实现图像插值与几何变换算法——几何变换算法

    Matlab实现图像几何变换与插值 1 文档下载 本算法已经整理成文档如下 有需要的朋友可以点击进行下载 说明 文档 点击下载 本算法文档 老生谈算法 matlab实现图像插值与几何变换算法 doc 更多matlab算法原理及源码详解可点击
  • 第65步 时间序列建模实战:ARIMA建模(Eviews)

    基于WIN10的64位系统演示 一 写在前面 从这一期开始 我们开始入坑时间序列模型 时间序列是一种数据类型 其中的数据点是按照时间顺序排列的 这种数据类型常常出现在各个领域 比如金融 股票价格的历史变动 气象 过去几年的天气状况 医学 一
  • rdesktop连接windows主机提示被拒绝的解决方法

    1 在待连接的Windows主机上依次 右击 我的电脑 gt 属性 gt 高级系统设置 gt 远程设置 gt 在远程桌面选项中 选择允许运行任意版本远程桌面的连接 2 检查linux主机和待连接的Windows 主机是否可以相互ping通
  • Pytorch优化器全总结(一)SGD、ASGD、Rprop、Adagrad

    目录 写在前面 一 torch optim SGD 随机梯度下降 SGD代码 SGD算法解析 1 MBGD Mini batch Gradient Descent 小批量梯度下降法 2 Momentum动量 3 NAG Nesterov a
  • 从数字化视角看飞书产品

    一 观点总结 1 用户体验优秀 飞书Office产品系列功能很贴心 细节交互体验好 飞书的周报功能吊打企微的周报功能 2 产品开放性欠缺 从日常办公的视角 多维表格功能强大 但从企业数字化建设的角度 首要工作是统一数据源管理 虽然多维表格提
  • DevOps 之 Code 阶段工具 Git

    代码编写阶段 我们需要将不同版本的代码存储到一个仓库中 大多数企业采用的版本控制系统就是 git 或者 svn 相比之下 git 作为版本控制系统居多 而远程仓库 GitLab 也是大多数企业的首先 因为它开源且活跃 Git Github