其他分享
首页 > 其他分享> > Git&GitHub 资源库同步实践

Git&GitHub 资源库同步实践

作者:互联网

注意事项与声明

平台: Windows 10

作者: JamesNULLiu
邮箱: jamesnulliu@outlook.com
博客: https://www.cnblogs.com/jamesnulliu/

学习笔记 转载请注明出处 欢迎留言

1. 在 GitHub 新建 Remote repository

在完成 GitHub 和 Git 的初始化和设置后, 我们先在 github 新建一个 远程资源库 (remote repository). 下图的两种方法皆可.

p08

在新建储存库页面, 我们分条解释所有内容:

这里插一句, 在 Copy&Paste 别人的项目时我们是需要阅读他们的 License 的.

点击 Create Repository, 储存库创建成功.

2. 建立 Local Repository

现在你建立了 remote repository, 在 github 上进入这个 repository 看到如下图的界面, 点击 code 再点击那两个小方块 (复制 https URL 的意思).

p09

这里我们希望把远程资源库 clone 到 project 这个文件夹内部, 因此一开始的 working dictionary 应该为 project 这个文件夹,
因此在 project 文件夹内部空白处右键, 在菜单栏运行 git bash here.

p10

橙色的路径表示这里是现在的 working dictionary,
如果从 github 上 clone 一个叫 "test" 的项目下来, 那么 ~/Destop/project/ 内就会出现一个叫 "test" 的文件夹, 里面是项目内容.
为做到这点, 我们输入以下指令 (xxx替换成我们前面复制的 https 地址).

git clone xxxxxx

clone 成功后 ~/Destop/project/ 内出现 test 文件夹, 点击进入, 里面有一个 "LICENSE" 文件, 这是我们在 github 上建立 remote repositroy 时选择的 Apache License 2.0; 可以选择用记事本打开, 并修改里面的内容和署名.

要注意一点, 这里我们连接 remote repository 的方式是用该项目的 https URL, 如果想用 ssh 协议连接, 请参考 利用 ssh proxy 连接 remote repository.

3. 项目同步实例

3.1. 储存区概念

先粗略看一看下 git repository 的示意图 (下图中 repository 是指 local repository, 而非 github 中的 remote repository).

image

对 git 来说, 分三个区域: working dictionary, staging area, local repository.
working area 就是用户能够执行更改操作的本地项目文件夹,
staging arealocal repository 是我们用 git 所操作的部分. 后文将详细介绍操作方式.
另一个要注意的点是: 在 github 上创建的是 "remote repository", 这和 git 所控制的三个区域是不同的; 在git 中, 默认用 origin 指代 remote repository , 可以使用以下代码查看:

git remote -v

3.2. 在 Remote Repository 创建文件

如图操作创建新文件. 需要注意的是, 在 github 上是不能删除 remote repository 中的文件的, 我们只能在本地利用 git 删除已经存在于 remote repository 中的文件.

p12

我们创建一个名为 "README.md" 的文件, 在里面随便写点内容.

p13

向下滚动鼠标滚轮, 选择把本文件 commit 到 main branch. 然后点击 "Commit new file" 即可.

p14

3.3. [pull] 同步 Remote 的更改至 Local Repository

打开 test 文件夹, 在空白处右键, 打开 git bash, 这时橙色字体显示的 working dictionary 路径应该是以 xxx/test 结尾的.
刚才我们更改了 github 上 remote repository 中的内容 (添加了一个文件), 而目前 working dictionary (本地 test 文件夹内部) 以及 local repository 是未同步的状态.
在终端输入以下指令:

git pull

终端返回一堆内容表示 pull 完成, 此时再看 working dictionary (本地 test 文件夹内部) 出现了 "README.md", 用记事本打开, 内容与我们在 github 上写的相同.
在 git 执行 pull 操作时, remote repository 中更改的内容会被 pull 至本地, 并且 同时修改 working dictionary 中的内容并将修改记录在 local repository.

3.4. 在 Local Repository 创建文件

在 test 文件夹内新建两个空文件夹命名为 "source" 和 "bin", 然后在终端输入以下指令 (注意, 你的 working dictionary 应该仍保持在 test 而非其他文件夹).

touch sync_1.txt
touch source/sync_2.txt
touch source/sync_2.txt
touch source/doNotSync_1.donot
touch bin/doNotSync_2.donot
touch bin/doNotSync_3.donot.plz

通过查看文件夹发现, 上面这些指令在对应位置创建了对应文件. 后缀名是无关紧要的, 关键是这些新的文件确实被加入到了我们的 working dictionary (本地 test 文件夹内部) 中.

3.5. [push] 同步 Local 的更改至 Remote Repository

如果我们想要把 local 的更改 push 至 remote repository, 需要执行三个步骤,
首先利用 git addworking dictionary 的更改添加到 staging area,
再利用 git commitstaging area 的更改提交到 local repository,
最后用 git pushlocal repository 的更改推送到 remote repository.

但我先做另一件事.
在终端输入以下指令.

git status

输出了很多语句, 其中 Untracked files 指的是:
存在于 workingspace, 但未被追踪 (没有被 add 至 staging area 且不存在于 local repository) 的文件或者文件夹.
对于 untracked 的文件夹, git 不会显示其内部的文件 (比如此时终端应该只会显示 bin/, 不会显示 bin 中的文件).
我们把 README.md 用记事本打开, 随意更改一些内容, 然后保存;
再回到终端输入 git status, 发现相较原先多了一个 Changes not stages for commit,
这是因为 README.md 原本存在于 local repository, 它的状态是 tracked, 而它现在被更改了内容.

我们先做第一件事:
利用 git addworking dictionary (本地 test 文件夹内部) 的更改添加到 staging area.

git add README.md
git add sync_1.txt
git add source/sync_2.txt
git add bin

添加完后, 再利用 git status 查看状态, 发现只有 "source/doNotSync_1.donot" 没有被添加到 staging area.
这里需要注意一个问题是:
当 add 整个文件夹(比如 bin), 文件夹里的所有文件都会被 add 到 staging area;
但如果 add 文件夹中的某个文件 (比如 source/sync_2.txt), 文件夹会转入 tracked 状态, 于是 git status 会检查该文件夹内部所有文件的状态 (所以显示 "source/doNotSync_1.donot" untracked) .

再做第二件事:
输入以下命令 ( xxx 替换为你对你这次更新的简要说明, 例如: "README.md changed"):

git commit -m "xxxx"

这一步是把 staging area 的更改 commit 至 local repository.

最后做第三件事:
输入以下命令 (注意, 这里是 mian 因为我们目前在 mian 分支上工作):

git push origin main

来到 github, 打开自己的 remote repository, 看见除了 "source/doNotSync_1.donot", 其他文件都已同步完成.

p15

如果你希望查看 commit 记录, 可以用以下命令实现 (-2 表示上两次 commit 记录):

git log -2

你也可以用 --since --until 查看一段时间的 commit 记录, 例如:

git log --since=2020-1-1 --until=2.days
git log --after=1.week
git log --before=1.day.100.minutes

如果出现 log 太多, 最后终端可能会返回一个 END 导致你无法输入任何命令, 这时候在键盘上敲一下 'q' 即可.


参考:
Pro Git, 2nd Edition(2014), Scott Chacon
git日志过多最后显示end无法输入命令

标签:文件夹,Git,资源库,working,repository,GitHub,git,test,remote
来源: https://www.cnblogs.com/jamesnulliu/p/gitandgithub-prac01.html