应用场景描述:只有一台windows电脑,有多个磁盘分区。需要在这台电脑上建立两个Git仓库,能够实现这两个仓库互为对方的远程仓库,以达到两个仓库能够互相推送、拉取的功能。
1. 添加全局的用户名和email:
1.1 git config --global user.name "你的用户名"
1.2 git config --global user.email "你的邮箱"
2. 建立第一个仓库:在 D 盘新建一个目录,如:D:/git_repositoryA
3. 在 git_repositoryA 初始化仓库:git init
4. 修改配置 ./git/config
5. 修改配置 ./git/hooks/post-update.sample
6. 建立第二个仓库:在 E 盘新建一个目录,如:E:/git_repositoryB
(注:只要不和第一个仓库在同一路径即可)
7. 重复 3、4、5 的步骤修改第二个仓库的配置
8. 现在回到 git_repositoryA 仓库,添加 git_repositoryB 为 git_repositoryA 的远程仓库
git remote add localRemoteRepoB e:/git_repositoryB
(注:重复 8 的操作,可以配置 git_repositoryA 为 git_repositoryB 的远程仓库)
9. 测试一下是否可以从 git_repositoryA 推送到 git_repositoryB
9.1 在 git_repositoryA 新建文件 test.txt,并随便写几行内容
9.2 添加 test.txt 到暂存区并提交
git add test.txt
git commit -m "提交的说明信息"
9.3 推送到 git_repositoryB
git push localRemoteRepoB master
经过以上步骤后,问题来了。
问题一、在执行完 9.3 步骤后,会报如下错误
这是因为 git 有安全目录的机制,即 git 认为 git_repositoryB 不是安全的,需要将 git_repositoryB 添加到配置里:
git config --global --add safe.directory 你的远程仓库目录
此时再执行 9.3 的命令,即可推送成功,如下图:
问题二、在解决完问题一后,转到 git_repositoryB 目录下,发现找不到推送的 test.txt 文件。
这是因为 git_repositoryB 仓库建立时用的是 git init 命令,不是祼仓库。我们需要将 head 指针重置到正确的位置。
解决:
git log
git reset --hard 8e08f0c5344cb553b4065cb7fc160e69a7fa04d2
这样就可在 git_repositoryB 看到推送的内容了。