Git 是一款强大的工具,但同时也相当复杂。要想真正掌握 Git,必须通过实际操作来学习。而实际操作需要一个环境。大部分不涉及远程仓库的基本操作都可以在本地建立的一个工作目录里练习,但一些涉及远程仓库的操作,譬如拉取和推送修改、解决冲突等,在本地创建的工作目录里是无法进行的。

为了解决这个问题,我们可以利用 Git 支持的 file:// 协议来在本地创建一个「远程」仓库。以下是具体的操作步骤:

首先,我们需要在本地创建特殊的仓库,称为「裸仓库」,使用 git init --bare 文件夹名 创建,例如:

git init --bare gittest.git
  ---

该命令会在当前目录下新建一个文件夹 ''gittest.git''
并在里面初始化一个内容是空的裸仓库。
按照惯例,
裸仓库命名一般习惯以 ''.git'' 结尾。

然后,
我们就可以 clone 这个仓库为工作目录了:
''git clone file://裸仓库全路径 工作目录''
为了模拟多人合作,
我们可以在本地克隆出多个工作目录。
注意:
''file://'' 协议本身有两个斜杠,
而全路径也是以斜杠开头,
因此 ''file:'' 之后会有连续的三个斜杠,
例如:

#Code syntax=sh <<---
git clone file:///home/edyfox/workspace/gittest.git workspace_alice
git clone file:///home/edyfox/workspace/gittest.git workspace_bob
  ---

为了模拟不同的项目参与者,
我们可以在克隆出来的多个工作目录里设置不同的用户姓名和 Email 地址:

#Code syntax=sh <<---
cd workspace_alice
git config user.name "Alice"
git config user.email "alice@localhost"
cd ..

cd workspace_bob
git config user.name "Bob"
git config user.email "bob@localhost"
cd ..
  ---

然后,
我们就可以在某个工作目录下创建文件、
修改文件、
提交文件了,
例如:

#Code syntax=sh <<---
cd workspace_alice
echo "Hello, Git!" > readme.txt
git add readme.txt
git commit -m "Initial commit"
  ---

我们可以以一个用户的身份把提交推送到「远程」,
再以另一个用户的身份拉取:

#Code syntax=sh <<---
git push
cd ..

cd workspace_bob
git pull
  ---

现在,
我们就可以在本地的多个工作目录中模拟所有的 Git 操作了,
包括解决冲突等。
这为学习和实践 Git 提供了一个安全的环境,
我们可以在这个环境中自由地尝试各种操作,
而不用担心影响到真正的项目。
希望这篇文章能帮助大家更好地理解和使用 Git!