Skip to content

Commit

Permalink
添加一个
Browse files Browse the repository at this point in the history
  • Loading branch information
frankelinli committed Mar 18, 2024
1 parent 1b7df0d commit 24b4620
Showing 1 changed file with 153 additions and 0 deletions.
153 changes: 153 additions & 0 deletions blog/git使用简介教程.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,153 @@
# 通过命令行从本地推送代码到GitHub

:::tip

原文连接[通过命令行从本地推送代码到GitHub | XSUN (xsun4231.github.io)](https://xsun4231.github.io/2019/04/15/git-connect/)

:::

首先,Git和GitHub不是一个东西。Git是一个版本管理系统,而GitHub是一个用来保存软件代码的平台。我们不妨把git看作是通讯技术,而github只是**一个**通讯服务商。也就是说除了github之外,还有很多的代码托管平台,大家都是用的git来上传下载代码,只不过github名气最大。



- 为了不受各种不同的软件影响,这里说的都是通过命令行操作.
- 这里只介绍一些最基本的命令和用法,在命令后面加`--help`可以查看详细的文档.

## 环境搭建

首先要做的事安装`git`,下载地址在[这里](https://git-scm.com/downloads).

git安装完之后,打开命令行执行`git --version`看看是否可以查看git的版本,如果返回版本信息,就OK了. git会自己安装一个`git Bash`, 不过git的命令行并不局限于bash,windows下直接在cmd或者powershell都可以使用.

本地的代码推送到github时,github需要验证用户的信息. 就好比你可以每次进门都填一次我叫什么,我从哪儿来,我是干什么的,也可以提前登陆好身份信息,“哔”的一声刷脸进门,这个登录的身份信息就是`ssh key`.

接下来的操作分为三步:

1. 确定本地是否已经有建立好的ssh key
- 打开git Bash(这里需要用到Bash, windows的cmd是没有ls命令的) 输入`ls -al ~/.ssh` 这里一个搜索命令,返回名称为`.ssh`的目录信息。如果有`id_rsa.pub`文件,就说明已经有ssh key了.
2. 如果没有,建立一组新的ssh key
- 执行命令`ssh-keygen -t rsa -b 4096 -C "[email protected]"`来生成一组ssh key,接下来直接按回车就可以了(文件位置使用默认位置不需要输入,passphrase默认空白,不设置,设置的话以后每次推送代码都要输密码)。
- 将生成的key登录到ssh-agent. 执行命令启动ssh-agent,windows:`eval $(ssh-agent -s)` Mac或者Linux:`eval "$(ssh-agent -s)"`.然后执行命令添加key,Mac:`ssh-add -K ~/.ssh/id_rsa` windows或者Linux:`ssh-add ~/.ssh/id_rsa`
3. 将建立好的ssh key登录到github
- 将ssh key的内容复制到剪贴板. window可以使用命令:`clip < ~/.ssh/id_rsa.pub` Mac可以使用:`pbcopy < ~/.ssh/id_rsa.pub` Linux可以使用:`sudo apt-get install xclip``xclip -sel clip < ~/.ssh/id_rsa.pub`

添加到github这一步我们单独说一下,以防弄错。打开github页面,点击用户头像,进入`setting`,在菜单中间的位置找到`SSH and GPG keys`,点击右上角的绿色按钮`New SSH key`,在`Title`里填写要添加的ssh key的介绍,比如”公司那台贼慢的电脑/家里的老爷机/学校的大屁股显示器”,然后在将复制的SSH key粘贴到`Key`里面,点击`Add SSH key`就可以了。

## 克隆项目代码

我们来到`GitHub`的代码页,可以在代码的右上角看到一个绿色按钮`Clone or Download`,点开之后可以看到克隆代码用的链接。

链接有两种,`https``ssh`, 简单来讲,使用https的链接克隆的项目需要用github的用户名密码来推送,使用ssh链接克隆的项目则使用ssh-key验证
[![https](https://docu-1319658309.cos.ap-guangzhou.myqcloud.com/usehttps.PNG)](https://xsun4231.github.io/2019/04/15/git-connect/usehttps.PNG)

[![ssh](https://docu-1319658309.cos.ap-guangzhou.myqcloud.com/usessh.PNG)](https://xsun4231.github.io/2019/04/15/git-connect/usessh.PNG)

由于我们已经设置好了ssh-key,所以使用格式为`[email protected]:用户名/项目名.github.io.git`的ssh链接.

```
git clone [email protected]:用户名/项目名.github.io.git
```



### 新建的repository

如果我们要将本地的工程文件推送到一个新建的GitHub库,首先确定两件事儿:

1. GitHub上建立了一个空的库,README都没有的那种,可以看到这个页面[![NEW](https://docu-1319658309.cos.ap-guangzhou.myqcloud.com/new_repository.PNG)](https://xsun4231.github.io/2019/04/15/git-connect/new_repository.PNG)
2. 本地的工程文件初始化了git,并且没有关联其他的库. git的初始化可以使用`git init`命令,移除其他的关联,可以使用`git remote remove name` 这里的name一般是`origin`.

然后执行下面的命令就可以了:

```
git commit -m "first commit"
git remote add origin ssh链接
git push -u origin master
```



## remote 和 local

git管理的代码有两个地方:

1. 一个是**remote** 可以理解为远端,也就是指托管代码的地方,使用github时,值得也就是github服务器端
2. 一个是**local** 直译本地,意译本地,他也就是本地的意思

从远端向本地同步代码,叫做`pull` 也就是拉,将本地代码同步到远端,叫做`push` 推送,简单而形象。

local值不需要,当然也不能修改,因为代码就在本地. remote的值可以随时添加,删除或者修改,remote是name和url成对设置的,一般默认的remote名是origin

- `git remote` 确认remote,会返回remote的名称
- `git remote get-url remoteName` 获得remote的url
- `git remote set-url remoteName url` 设置remote的url

## branch

为了实现并行的开发,代码通过`branch`(分支)来进行管理,不妨branch理解成时间线、河流,可分成几个分支并行前进,也可以随时汇集到一起(只要内容没有冲突)。
可以通过`git branch`来查当前本地的分支。
切换分支的命令为 `git checkout "branch_name"`
常用的生成分支命令为 `git checkout -b "new_branch_name" "base_branch_name"`
使用`git branch "new_branch_name`也可以生成新的分支,不过该命令并不切换到新生成的分支.

- 分支的名称不可以有空格,所以一般通过下划线连接单词,当分支名含有特殊符号比如 # 时,需要在分支名前后加 “ 来防止控制台执行时的歧义。

## commit

如果说branch是时间线,那么commit就是时间线上的存档点。刚刚创建或者修改完的文件,在git中并不算**保存**了,如果强行修改分支,这些内容就会丢失。将修改的内容保存到branch的记录中的操作,叫做`commit(提交)`.

执行commit之前,首先需要把准备提交的文件添加到提交名单,这个操作使用 `git add` 命令。
添加之前,可以通过`git status`命令来查看有哪些文件被修改了.

这里简单的从bash颜色上区分一下,
绿色的内容(Changes to be committed) 是已经准备好可以提交的内容,
红色的内容(Changes not staged for commit) 是还没有添加到提交列表的修改.

下面介绍几种简单常用的命令

```
# 将所有的修改添加到提交列表
git add --all
# 将指定文件添加到提交列表,多个文件的时候使用空格区分
git add aaa.md
git add bbb.md ccc.md path/ddd.md
# 可以使用正规表达来指定多个文件
git add a*.md
git add path/\*.md
```



文件添加完,就可以执行commit来提交了:

```
# 提交的时候,commit信息是必须的,可以直接使用-m 来指定commit信息
git commit -m "在这里输入一条commit信息"
# 使用github的时候,可以在commit信息里通过 #+编号 来关联Issue,这样提交的commit可以在Issue中直接找到。
git commit -m "#001 commmit信息"
```



## push

将remote的最新内容同步到本地的命令是`git pull`,将本地的修改推送到remote的命令是`git push`.

- 出现冲突的时候可以加上`--force`来强制推送,不过这个操作不推荐,推送代码尽可能在解决冲突之后,使用最简单流畅的`git push`

推送命令的对象是分支,所以当我们推送本地创建的新分支时,需要指定一下这个分支在remote的信息:

```
# git push 推送命令
# --set-upstream 告诉git 我要设置推送目的地
# remotename 要推送到的remote名 一般是 origin
# branch_name 推送的branch名 含有特殊字符的话要用"branch_name"
git push --set-upstream remotename branch_name
```



- 无论是切换分支,还是推送的时候,如果前面命令输入正确,git bash可以补全分支名。所以多用`tab`不仅方便,还能帮忙检查一下分支名前面的命令行有没有错。

0 comments on commit 24b4620

Please sign in to comment.