Skip to content

Commit

Permalink
周五-08-18 16:13:53
Browse files Browse the repository at this point in the history
  • Loading branch information
asdqwe123456 committed Aug 18, 2023
1 parent d5ae3c8 commit e411e3c
Show file tree
Hide file tree
Showing 6 changed files with 596 additions and 33 deletions.
256 changes: 231 additions & 25 deletions _posts/API_software/2023-07-29-github.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ tags:
{:toc}


### 1 github使用指南




Expand All @@ -25,13 +25,17 @@ tags:


版本控制是什么?
一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统

- 一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统

为什么需要版本控制?
更好的关注变更,了解到每个版本的改动是什么,方便对改动的代码进行检查,预防事故发生也能够随时切换到不同的版本,回滚误删误改的问题代码;

- 更好的关注变更,了解到每个版本的改动是什么,方便对改动的代码进行检查,预防事故发生也能够随时切换到不同的版本,回滚误删误改的问题代码;



什么是 git

- Git 是一款免费、开源的分布式版本控制系统,他是著名的 Linux 发明者 Linus Torvalds 开发的
- GitHub 主要提供基于 git 的**版本托管**服务。也就是说现在 GitHub 上托管的所有项目代码都是基于 Git 来进行版本控制的,所以 Git 只是 GitHub 上用来管理项目的一个工具而已,GitHub 的功能可远不止于此!

Expand Down Expand Up @@ -86,6 +90,12 @@ Gist









#### 1.2 git 目录结构

- Git 的本质是一个**文件系统**,工作目录中的所有文件的**历史版本**以及**提交记录**(commit)都是以文件对象的方式保存在 `.git` 目录中的。
Expand Down Expand Up @@ -176,31 +186,45 @@ git remote add origin 仓库名



#### 远端仓库/ remote
Git 有三种状态,你的文件可能处于其中之一: 已提交(committed)、已修改(modified) 和 已暂存(staged)。

- 已修改表示**修改**了文件,但还没保存到数据库中。
- 已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
- 已提交表示数据已经安全地保存在本地数据库中。





### 2 远端仓库/ remote

#### 2.1 http 和 git 协议有什么区别

- 第一组使用 HTTPS 协议,第二组使用 SSH 协议。具体选择哪种协议取决于你的需求和配置。
- 使用 HTTPS 协议需要提供**用户名和密码**,而使用 SSH 协议则需要设置密钥对。

```bash
以下两者有什么区别 git remote -v
# 用于查看当前项目中配置的所有远程仓库的详细信息。
git remote -v
origin https://github.com/*****/tinywebserver (fetch)
origin https://github.com/*****/tinywebserver (push)
origin [email protected]:*****/simple-douyin.git (fetch)
origin [email protected]:*****/simple-douyin.git (push)
```

其中

- `fetch``git fetch` 命令用于从远程仓库获取最新的代码和提交历史,但不会自动合并或更新你的本地分支。它将远程仓库的内容下载到你的本地仓库,使你能够查看和**比较**远程分支与本地分支之间的差异。`fetch` 操作**不会修改**你的本地分支,只会更新你的本地仓库。
- `push``git push` 命令用于将你的本地分支的提交推送到远程仓库。它将你的本地分支的提交上传到远程仓库,并将远程仓库的相应分支更新为你的提交。`push` 操作会修改远程仓库的内容。

1. `fetch``git fetch` 命令用于从远程仓库获取最新的代码和提交历史,但不会自动合并或更新你的本地分支。它将远程仓库的内容下载到你的本地仓库,使你能够查看和**比较**远程分支与本地分支之间的差异。`fetch` 操作**不会修改**你的本地分支,只会更新你的本地仓库。
2. `push``git push` 命令用于将你的本地分支的提交推送到远程仓库。它将你的本地分支的提交上传到远程仓库,并将远程仓库的相应分支更新为你的提交。`push` 操作会修改远程仓库的内容。

```bash
# 用于查看当前项目中配置的所有远程仓库的详细信息。
git remote -v

git remote add origin_ssh [email protected]: git/git.git
git remote add origin_http https://github. com/git/git.git
#### 2.2 链接远程仓库

```bash
# 链接远程仓库,使通过网络与远程仓库进行交互。
git remote add <remote_name> <remote_url>
# 设置fetch 和 push 为不同的仓库
git remote set-url --add --push origin git@github. com: my_repo/git.git
Expand All @@ -210,6 +234,8 @@ git remote set-url --add --push origin git@github. com: my_repo/git.git





#### 查看文件内容

`git cat-file` 是一个用于查看 Git 对象内容的命令。Git 中的对象是存储在仓库中的基本数据单元,包括提交(commit)、树(tree)、标签(tag)和文件内容(blob)等。
Expand Down Expand Up @@ -238,7 +264,9 @@ git remote set-url --add --push origin git@github. com: my_repo/git.git



#### 分支操作
### 3 分支操作

#### 3.1 本地操作分支

```bash
# 查看本地分支列表
Expand All @@ -249,24 +277,21 @@ git branch -r
# 新建一个叫 develop 的分支
git branch develop
# 创建一个名为 "test" 的新分支,并从 "master" 分支进行分叉。
git branch test master
# 切换 到 dev 分支
git checkout dev
# 新建并且自动切换到 develop 分支
git checkout -b dev
# 删除本地分支
git branch -d develop
# 删除远程分支
git push origin :develop
# 新建并且自动切换到 develop 分支
git checkout -b dev
# 把 develop 分支推送到远程仓库
git push origin develop
# 如果你远程的分支想取名叫 develop2 ,那执行以下代码:
git push origin develop:develop2
#用来切换tag
git checkout v1.0
Expand All @@ -282,7 +307,60 @@ git tag v0.0.1



合并分支


#### 3.2 想拉取远程仓库的 dev 分支怎么做

要拉取远程仓库的 dev 分支,可以按照以下步骤进行操作:

```bash
git fetch origin dev
```



1. 使用 git fetch origin dev 命令从远程仓库拉取 dev 分支的最新代码。这将会将远程仓库的 dev 分支代码下载到你本地仓库,不会自动合并到你当前的分支。
2. 使用 git checkout dev 命令切换到 dev 分支。如果本地还没有 dev 分支,可以使用 git checkout -b dev origin/dev 命令创建并切换到 dev 分支。

现在你已经成功拉取了远程仓库的 dev 分支,可以开始在本地与该分支进行开发和修改。记得在操作前先保存好本地的修改,以免冲突。





#### 3.3 远程分支

- 远程分支**没有新建**指令, 直接 **push** 就好

```bash
# 删除远程分支
git push origin --delete publish
# 通过将 <source> 设置为空,就表示没有要推送的本地分支,而只是请求删除远程分支
git push origin :develop
# 如果你远程的分支想取名叫 develop2 ,那执行以下代码:
git push origin develop:develop2
# 把 develop 分支推送到远程仓库
git push origin develop
```







#### 3.4 合并分支

- Git 保存的不是文件的变化或者差异,而是一系列不同时刻的 **快照** 。在进行提交操作时,Git 会保存一个提交对象(commit object)。
- Git 的分支,其实本质上仅仅是指向**提交对象**的可变**指针**
- Git 又是怎么知道当前在哪一个分支上呢? 也很简单,它有一个名为 HEAD 的特殊指针。指向当前所在的本地分支(译注:将 HEAD 想象为当前分支的别名)。
- 由于 Git 的分支实质上仅是包含所指对象校验和(长度为 40 的 SHA-1 值字符串)的文件,所以它的创建和销毁都异常高效。





```bash
# 我们在一个 featureA 分支开发完了一个功能,这个时候需要合并到主分支 master 上去
Expand All @@ -302,6 +380,134 @@ git rebase featureA





#### 3.5 遇到冲突时的分支合并

- 有时候合并操作不会如此顺利。 如果你在两个不同的分支中,对**同一个文件**的同一个部分进行了不同的修改,Git 就没法干净的合并它们。
- 此时 Git 做了合并,但是**没有自动地创建一个新的合并提交**。 Git 会**暂停**下来,等待你去**解决**合并产生的**冲突**



```bash
# 现在在 master分支, 想要合并 dev 的内容
$ git merge dev
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.
$ git status
On branch master
You have unmerged paths.
(fix conflicts and run "git commit")
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: index.html
no changes added to commit (use "git add" and/or "git commit -a")
```



任何因包含合并冲突而有待解决的文件,都会以未合并状态标识出来。 Git 会在有冲突的文件中加入标准的冲突
解决标记,这样你可以打开这些包含冲突的文件然后手动解决冲突。 出现冲突的文件会包含一些特殊区段,看
起来像下面这个样子:

```bash
# HEAD 所指向的版本
<<<<<<< HEAD:index.html
<div id="footer">contact : [email protected]</div>
=======
# 合并所指向的版本
<div id="footer">
please contact us at [email protected]
</div>
>>>>>>> iss53:index.html
```

为了解决冲突,你必须选择使用由 ======= 分割的两部分中的一个,或者你也可以自行合并这些内
容。同时 `<<<<<<<` ,` =======` , 和 `>>>>>>>` 这些行被**完全删除**了。
#### 3.6 多人合作冲突
远程跟踪分支是远程分支状态的引用。它们是你无法移动的本地引用。一旦你进行了网络通信, Git 就会为你移
动它们以精确反映远程仓库的状态。它们以\<remote>/\<branch> 的形式命名。
假设你的网络里有一个在 `git.ourcompany.com 的 Git` 服务器。 如果你从这里克隆,Git 的 clone 命令会为你自动将其命名为 origin,拉取它的所有数据, 创建一个指向它的 `master `分支的指针,并且在本地将其命名为 `origin/master`。Git 也会给你一个与 origin 的master 分支在指向同一个地方的本地 master 分支,这样你就有工作的基础。
隔离性
- 如果你在本地的 master 分支做了一些工作,在同一段时间内有其他人推送**提交**`git.ourcompany.com` 并且**更新**了它的 master 分支,这就是说你们的提交历史已走向不同的方向。 即便这样,只要你保持不与origin 服务器连接(并拉取数据),你的 origin/master 指针就不会移动。
- 如果要与给定的远程仓库**同步数据**,运行 `git fetch <remote> `命令
### 常见开发场景
#### 1、本地仓库有文件,远程服务器上面是新建的仓库
```bash
# 1 初始化仓库
git init test

# 2 在仓库中新建文件编辑内容(例如test.txt)

# 3 添加到暂存区
git add test.txt

# 提交修改
git commit test.txt -m '提交test.txt'

# 关联远程仓库, origin也是默认仓库的名字,也可以命名为其它的名字
git remote add origin [email protected]:blueses/test.git

# 把本地仓库的master分支与远程仓库的master分支关联起来
# 把本地仓库的master分支的文件推送到远程仓库的master分支中
git push -u origin master


```





#### 2、远程服务器上面有很多代码,要拉取到本地开始开发

```bash
# 直接克隆
git clone [email protected]:blueses/test.git

# add、commit、pull、push 三步走
```









### 其他操作

#### 提交操作

```bash
Expand All @@ -328,15 +534,15 @@ filter --branch

```bash
git reflog expire --expire=now --all
git gc --prune=now
git gc --prune=now

```





#### 拉取操作
#### 拉取操作概念辨析

- `Clone`拉取完整的仓库到本地目录,可以指定分支,深度.
- `Fetch`将远端某些分支最新代码拉取到本地,不会执行merge操作,会修改refs/remote内的分支信息,如果需要和本地代码合并需要手动操作.
Expand Down
4 changes: 4 additions & 0 deletions _posts/byte_tech/2023-07-25-go-1.md
Original file line number Diff line number Diff line change
Expand Up @@ -1091,6 +1091,10 @@ cd $GOPATH

#### go module

有了 Go module 之后,可以方便地管理项目的依赖关系,并且**不需要手动**下载库。使用 Go module,你可以在代码中引入需要的库,并通过指定版本或者版本范围来自动获取相应的库。当你首次引入一个新的库时,Go module 会自动下载该库及其依赖到本地的缓存中。这样,你就可以随意引入库,而无需手动下载。



依赖管理三要素

- 1.配置文件, 描述依赖go.mod
Expand Down
Loading

0 comments on commit e411e3c

Please sign in to comment.