此篇为番外,未收入在本篇的原因是 Git 是个复杂但很基础的工具,因此大部分的人都已经有个初步的认识,但是以本篇的篇幅又不足以说明整个 Git 的操作,因此放入番外作为补充。
如果没有版本控制工具的帮助,在协作开发时会无法管理来自不同开发者的变动,不同开发者间的程序码可能互相覆盖,造成系统异常。在发布时,也会因为没有版本的依据而难以确保版本更新的项目,造成麻烦。
Git 是个分散式的程序码版本控制工具,存放程序码的地方称为 Repository , Repository 分为 Server 与 Client 两种, Server 是服务器上存放的程序码库,而 Client 则是各个使用者自己机器上的程序码库。使用者可以任意修改 Client 的程序码,并不需要理会服务器或是其他使用者,当想要上传至服务器的程序码库时,需要做一个合并的动作,确保程序码可以安全地更新至服务器中,如果有同时修改的部分, Git 会提示冲突,使用者需要解决冲突後才能上传。
Git 在不同的使用者的机器上可以是不同的程序码内容,所以使用者可以自由地变更,当要上传至服务器时, Git 会检视是否有冲突的问题,在修复後才能上传,来确保专案的正确性。另外 Git 的 tag 功能,让我们可以清楚地知道发布版本中的程序码状态,藉以管理各个版本的程序码。
使用 Homebrew 安装 Git :
brew install git
要使用 Git 前,需要将特定的目录定为 Repository ,选好目录後,使用 git init
指令:
mkdir git-test
cd git-test
git init
Initialized empty Git repository in /git-test/.git/
使用 git status
可以观看目前程序码库的状态:
% git status
On branch master
No commits yet
nothing to commit (create/copy files and use "git add" to track)
可以看到当前是在分支 master
,并且是还没 commit 的状态。
现在在 git-test
目录中新增 README.md
档案:
% echo "# Hello Git" > README.md
% git status
# ...
Untracked files:
(use "git add <file>..." to include in what will be committed)
README.md
# ...
使用 git status
会发现 README.md
被归为未追踪的档案。
Git 的暂存区会存放待提交的档案,因此如果要将档案加入这次的提交前,需要先加入暂存区:
% git add README.md
% git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: README.md
使用 git add README.md
将 README.md
加入暂存区中。
如果要将档案从暂存区移出的话,则需要下
git rm
的指令。
在档案被加入暂存区後,我们可以提交此次的修改至 Git 上:
% git commit -m 'add readme'
[master (root-commit) 31a3d69] add readme
1 file changed, 1 insertion(+)
create mode 100644 README.md
% git log
commit 31a3d69544f7247b8c8fd5ba59b54dbe8a8d6209 (HEAD -> master)
Author: peterhpchen <[email protected]>
Date: Tue Sep 7 21:39:38 2021 +0800
使用 git commit
提交修改,并使用 -m
加入提交讯息。
在提交完成後,使用 git log
观察节点。
在 Git 内,在同一个 Repository 下,可以创建复数个分支,每个分支都可以想成是个不同内容的代码库,要创建一个新的分支,需要由原有的分支复制出来。
现在我们使用 git branch dev
创建名为 dev
的分支:
% git branch dev
% git branch
dev
* master
建立完分支 dev
後,可以使用 git branch
观看分支列表,可以看到除了原本的 master
外,已经多了一个 dev
的分支。
建立分支後,可以使用 git checkout
切换分支:
% git checkout dev
Switched to branch 'dev'
% git status
On branch dev
nothing to commit, working tree clean
使用 git status
确认目前所在的分支。
在与远端 Repository 联系前,我们需要有个认证机制确保身份与权限,为此要建立 ssh :
% ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/PeterChen/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/PeterChen/.ssh/id_rsa.
Your public key has been saved in /Users/PeterChen/.ssh/id_rsa.pub.
The key fingerprint is:
% cat /Users/PeterChen/.ssh/id_rsa.pub
ssh-rsa ... PeterChen@GM-MacBook-Pro
使用 ssh-keygen
建立一组 ssh 公私钥,名为 id_rsa
,後面有 .pub
结尾的为公钥,将其复制至远端的 ssh server 。
使用 git remote
加入远端 Repository :
% git remote add origin [email protected]:peterhpchen/git-test.git
% git remote -v
origin [email protected]:peterhpchen/git-test.git (fetch)
origin [email protected]:peterhpchen/git-test.git (push)
使用 git remote add
加入新的远端路径,第一个参数是这个远端路径的名称,第二个是远端路径。完成後可以使用 git remote -v
列出目前的远端路径。
要将变更推至远端,可以使用 git push
:
% git push origin dev
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 225 bytes | 225.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To github.com:peterhpchen/git-test.git
* [new branch] dev -> dev
git push
的第一个参数是远端路径名称,第二个是要推送的分支。
使用
git pull
可以拉取远端的程序码。
<<: 乔叔带你上手 Elastic Stack - 探索与实践 Observability 系列 - 文章总览与心得
前言 今天选择的是top 100 liked,并与linked list相关的题目:138. Cop...
资料视觉化 这边我们会用到seaborn来做一下简单的资料视觉化。 import seaborn ...
这篇要透过CardView来制作一个简易的清单 首先要在Gradle Scripts/build g...
前言 根据维基百科,20世纪的90年代,服务器处理每一个浏览器请求都要重新载入页面,换句话说,每当网...
在 Day 31 分享 RecyclerView 如何载入更多之後,先来帮大家回顾之前星战的 Pro...