git 上传项目到 github

windows 和 debian 安装方法

一、安装 git

windows10

下载地址

http://git-scm.com/download/

使用方法

在本地项目目录的空白处右键-“Open Git Bash here”

debian11

1
2
apt update
apt -y install git

二,为Github账户设置SSH key

1
2
3
4
# 使用ssh-keygen命令生成公钥id_rsa.pub和私钥id_rsa,其中-t表示类型是rsa类型(非对称加密)。
#直接3次回车,不需要填写
ssh-keygen -t rsa -C "pub@github" # -C 表示注释,会出现在公钥内容的末尾(此参数可省略)
# -C参数省略以后,公钥内容的末尾默认为:用户名@主机名(例如:root@localhost)

#默认生成公钥的位置,
#C:\Users\你的用户名.ssh # windows
#/root/.ssh/     # linux root
#/home/user/.ssh/   # linux 普通用户

#注意:root和user生成的公钥各自独立,每个用户都要在github后台增加 ssh key

1
2
3
# 使用 -f 参数可指定生成的文件名和目录
ssh-keygen -t rsa -f /root/.ssh/id_rsa.github
# 在/root/.ssh/目录下生成公钥id_rsa.github.pub和私钥id_rsa.github

##################操作说明
#打开 id_rsa.pub 并复制公钥内容,在 github.com 用户后台页面左侧新增一个 ssh key
#个人头像 -> settings -> SSH and GPG keys -> New SSH key
##Title 标题 随便写一个
##Key type 类型 选择 Authentication Key
##Key     粘贴 id_rsa.github.pub 公钥内容

#id_rsa.github.pub 公钥内容类似如下:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAA3U= pub@github

三、全局部署 GitHub 用户名和邮箱,让 GitHub 知道你是谁。

用户名:abc123 邮箱:abc123@gmail.com

1
2
3
4
git config --global user.email abc123@gmail.com
git config --global user.name abc123
#可选(有时会提示增加一个安全目录)
git config --global --add safe.directory /home/hexo/.hexo

四,上传本地项目

1、第一次上传新项目

适用于:本地项目第一次上传。在”project”下执行 git 命令,目录结构如下:

1
2
3
4
/project
-- 项目文件1
-- 项目目录1
---- 项目文件2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 初始化本地项目,会在本地项目目录下新建 .git 文件夹(此文件夹是隐藏的)
git init

# 设置别称 node_test 并与远程仓库关联,别称可以随便起(仅第一次需要)
git remote add node_test git@github.com:abc123/node_demo.git

# 把准备添加到仓库的文件放到暂存区
git add . #添加project目录内所有文件
git add 项目目录1/ #添加project目录下的项目目录1内所有文件
git add README.md #添加project目录中单个文件

# 准备提交到仓库 -m "此处是目录或文件的更新日志"
git commit -m "修改了文件中的小bug"

# 第一次上传项目时,为项目设置一个分支,不设置则默认是 master,这里定义的是 main 分支(此步为可选)
#git branch -M main

# 如果你是修改代码后上传到仓库,这一步是标准操作,也是个好习惯(如果是新创建的仓库,可以省略)
# 拉取仓库数据, -r 指定pull的方式为rebase。文章底部有关于 pull 方式的解释
git pull -r node_test master   # master 是仓库的分支

# 上传代码到GitHub仓库
git push -u node_test master # master 是仓库的分支

2、为远程项目新增内容

适用于:本地项目已经被删除时,想把”新建文件夹”下的内容上传到github仓库中。在”新建文件夹”下执行 git 命令,目录结构如下:

1
2
3
4
/新建文件夹
-- 要新增的文件1
-- 要新增的目录1
---- 要新增的文件2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 先初始化
git init

# 为仓库 git@github.com:abc123/node_demo.git 创建别名 node_test 方便后面简化操作
git remote add node_test git@github.com:abc123/node_demo.git

# 拉取仓库数据, -r 指定pull的方式为rebase
# 文章底部有关于 pull 方式的解释
git pull -r node_test master

#添加目录内所有文件到暂存区
git add .

#提交并为每个文件加上日志说明"add posts"
git commit -m "add posts"

#上传
git push -u node_test master

总结

每次修改本地项目后都要进行上面的操作太麻烦了,如果不是第一次上传,可以简化命令,最多只需要4步

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 1、添加目录内所有文件操作到暂存区(文件操作包括:修改、删除、新增文件)
git add .

# 2、提交文件操作并加上日志"ssl bugs xxx"
git commit -m "ssl bugs xxx"

# 如果文件操作只是修改、删除文件,没有新增文件,第1步和第2步可以合并成一条命令,如下:
git commit -a -m "ssl bugs xxx" 或 git commit -am "ssl bugs xxx"
#以下是返回内容
#[master df65159] ssl bugs xxx
#2 file changed, 2 insertion(+), 2 deletion(-)

# 3、从远程仓库拉代码(当仓库有多个管理者时,此为标准动作)
git pull
#以下是返回内容
#Current branch master is up to date.

# 4、上传
git push
#以下是返回内容
#Enumerating objects: 16, done.
#Counting objects: 100% (16/16), done.
#Delta compression using up to 2 threads
#Compressing objects: 100% (9/9), done.
#Writing objects: 100% (9/9), 1.43 KiB | 730.00 KiB/s, done.
#Total 9 (delta 5), reused 0 (delta 0), pack-reused 0
#remote: Resolving deltas: 100% (5/5), completed with 5 local objects.
#To github.com:abc123/hexo_project.git
# f6b5b58..9d2c11f master -> master

pull 方式的区别

merge 是一个合并操作,将两个分支的修改合并在一起,会提交合并中修改的内容。

rebase 并没有进行合并操作,只是提取了当前分支的修改。rebase 操作会丢弃当前分支已提交的 commit,不要在有协作开发的分支上执行 rebase 操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 在每次执行 git pull 命令之前运行一次
git config pull.rebase false # merge
#或者
git config pull.rebase true # rebase
# 然后再执行 git pull 命令
git pull node_test master

# 以上也可以直接合并成一条命令
git pull -r node_test master
# 或者
git pull --rebase node_test master

# 当然,你还可以通过执行 git config --global 命令来永久指定默认的处理方式,比如:
git config --global pull.rebase true # 设置默认使用 rebase 方式
# 以后直接
git pull node_test master

上传时排除文件和目录

如果只想上传一部分文件可以在项目目录下创建一个名为 .gitignore 的文件,在里面加上不想上传的文件或目录即可,例如:

1
2
3
4
5
6
7
8
9
10
11
12
.DS_Store
Thumbs.db
db.json
*.log
node_modules/
public/
.deploy*/
_multiconfig.yml
themes/
.git/
.github/
desktop.ini

git 其他命令

1
2
3
#查看本地修改项
git status