在远程机器上,我使用以下命令创建一个裸仓库:
在我的本地机器上,在刚克隆的存储库中,我创建了一个“引用”,指向位于远程机器上的裸存储库:
现在,我可以从本地代码仓库推送到远程机器上的裸仓库:
因此,我的问题是:为什么我们需要这个裸库?为什么我们不能只有一个远程仓库,并直接在本地和远程仓库之间交换内容?或者,为什么我们不能只使用
用 git init 命令创建的仓库称为工作目录。在仓库的顶级文件夹中,您会发现两件事情:
- 一个 .git 子文件夹,其中包含您的仓库的所有 git 相关修订历史记录 - 工作树,或已检出的项目文件的副本。
用 git init --bare 命令创建的仓库称为裸仓库。它们与工作目录略有不同。首先,它们不包含源文件的任何工作或已检出的副本。其次,裸仓库将您的仓库的 git 修订历史记录存储在仓库的根文件夹中,而不是在 .git 子文件夹中。注意…裸仓库通常带有 .git 扩展名。
因此,现在要理解这一点,我需要知道:
1. "修订历史记录" 是什么? 2. "工作树" 是什么? 3. "已检出的副本" 是什么?
这只是第一部分。我知道,回答会是:去读 git 教程或 git 简介。好吧,我做到了。它的第一个问题是术语的使用是“循环”的。A 通过 B 表达,B 又通过 A 表达。其次,我没有时间读一本书来找到我的问题的答案。第三,我百分之百肯定,我的问题的答案可以用简单的术语表达。实际上,这是微不足道的。
git init --bare $HOME/bare/My-Repo
在我的本地机器上,我克隆了一个仓库(但不是我在远程机器上创建的那个仓库):
git clone ssh://something.com/My-Repo
在我的本地机器上,在刚克隆的存储库中,我创建了一个“引用”,指向位于远程机器上的裸存储库:
git remote add my_remote ssh://remote.com/${USER}/bare/My-Repo
我不知道这是否与我的问题相关,但我也在本地存储库中执行以下操作:
git config remote.my_remote /some/path/git-receive-pack
git config remote.my_remote /some/path/git-upload-pack
现在,我可以从本地代码仓库推送到远程机器上的裸仓库:
git push my_remote master
现在的想法是在远程机器上创建另一个仓库,该仓库应从裸仓库中获取一些内容。我通过在远程机器上执行以下命令来创建此仓库:
some_script.sh $HOME/bare/My-Repo $HOME/My-Repo
现在,我在远程机器上的$HOME/My-Repo
做了一些更改(请注意,这不是裸库),然后我进行了git add
和git commit
操作,之后我进行了推送:
git push origin my-dev-branch
因此,我将代码推送到裸仓库(位于同一台远程机器上)。之后,我回到本地机器并从远程机器(即裸仓库)“取回”更改:
git fetch my_remote
git checkout -b my-dev-branch my_remote/my-dev-branch
git fetch origin
git rebase origin/master
因此,我的问题是:为什么我们需要这个裸库?为什么我们不能只有一个远程仓库,并直接在本地和远程仓库之间交换内容?或者,为什么我们不能只使用
rsync
(或 scp
)将本地仓库复制到远程机器上并从远程机器上复制回来?
补充说明
这就是为什么我提出问题而不是搜索的原因。我已经搜索了我的问题,第一个链接在这里:http://www.saintsjd.com/2011/01/what-is-a-bare-git-repository/
我在那里读到:用 git init 命令创建的仓库称为工作目录。在仓库的顶级文件夹中,您会发现两件事情:
- 一个 .git 子文件夹,其中包含您的仓库的所有 git 相关修订历史记录 - 工作树,或已检出的项目文件的副本。
用 git init --bare 命令创建的仓库称为裸仓库。它们与工作目录略有不同。首先,它们不包含源文件的任何工作或已检出的副本。其次,裸仓库将您的仓库的 git 修订历史记录存储在仓库的根文件夹中,而不是在 .git 子文件夹中。注意…裸仓库通常带有 .git 扩展名。
因此,现在要理解这一点,我需要知道:
1. "修订历史记录" 是什么? 2. "工作树" 是什么? 3. "已检出的副本" 是什么?
这只是第一部分。我知道,回答会是:去读 git 教程或 git 简介。好吧,我做到了。它的第一个问题是术语的使用是“循环”的。A 通过 B 表达,B 又通过 A 表达。其次,我没有时间读一本书来找到我的问题的答案。第三,我百分之百肯定,我的问题的答案可以用简单的术语表达。实际上,这是微不足道的。