Git&GitHub 资源库同步实践
作者:互联网
注意事项与声明
平台: Windows 10
作者: JamesNULLiu
邮箱: jamesnulliu@outlook.com
博客: https://www.cnblogs.com/jamesnulliu/
学习笔记 转载请注明出处 欢迎留言
1. 在 GitHub 新建 Remote repository
在完成 GitHub 和 Git 的初始化和设置后, 我们先在 github 新建一个 远程资源库 (remote repository). 下图的两种方法皆可.
在新建储存库页面, 我们分条解释所有内容:
- 先给 remote repository 取个名字 (我们这里就叫 test), Despcription 是可选的.
- Public 指公开 repository, 任何人都能在 github 中搜索到, 也能通过网址打开; Private 指不公开, 只有你指定的用户能看见你的 repository.
- README file 是指在你的 repository 中添加一个 "README.md" 文档, 这是介绍和解释项目的文档, 使用 markdown 语法编写 (这篇文章也是用 md 语法编写的). 一个规范的项目必须要有 "README.md". 我们这里先不添加.
- .gitignore 是指在你的 repository 中添加一个 ".gitignore" 文档, 该文档指定了哪些文件应该被 git 忽略. 我们这里先不添加.
- License 是指你整个项目的许可证. 许可证限制了他人如何使用你的项目; 如果没有许可证, 法律上任何人是不可以使用你的项目的.
这里我使用了 Apache License 2.0, 粗略地说是任何人可以永久使用 (或部分使用) 我的源码, 但在例如申请专利时需要保留我的版权声明; 任何人可以在他的项目中修改我的源码, 但需要明确标识; 也可以在修改处添加自己的版权声明.
这里插一句, 在 Copy&Paste 别人的项目时我们是需要阅读他们的 License 的.
点击 Create Repository, 储存库创建成功.
2. 建立 Local Repository
现在你建立了 remote repository, 在 github 上进入这个 repository 看到如下图的界面, 点击 code 再点击那两个小方块 (复制 https URL 的意思).
这里我们希望把远程资源库 clone 到 project 这个文件夹内部, 因此一开始的 working dictionary 应该为 project 这个文件夹,
因此在 project 文件夹内部空白处右键, 在菜单栏运行 git bash here.
橙色的路径表示这里是现在的 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).
对 git 来说, 分三个区域: working dictionary, staging area, local repository.
working area 就是用户能够执行更改操作的本地项目文件夹,
staging area 和 local repository 是我们用 git 所操作的部分. 后文将详细介绍操作方式.
另一个要注意的点是: 在 github 上创建的是 "remote repository", 这和 git 所控制的三个区域是不同的; 在git 中, 默认用 origin
指代 remote repository , 可以使用以下代码查看:
git remote -v
3.2. 在 Remote Repository 创建文件
如图操作创建新文件. 需要注意的是, 在 github 上是不能删除 remote repository 中的文件的, 我们只能在本地利用 git 删除已经存在于 remote repository 中的文件.
我们创建一个名为 "README.md" 的文件, 在里面随便写点内容.
向下滚动鼠标滚轮, 选择把本文件 commit 到 main branch. 然后点击 "Commit new file" 即可.
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 add
把 working dictionary 的更改添加到 staging area,
再利用 git commit
将 staging area 的更改提交到 local repository,
最后用 git push
将 local 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 add
把 working 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", 其他文件都已同步完成.
如果你希望查看 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