1

语境:

  • 用户“dev”,主目录/home/dev
  • 我将调用的生产代码/thepath/codebase
  • 工作目录/thepath/dev(当前包含应该是分支的文件)
  • 项目名为 KizunaDB

最终,我想要一个名为某处的裸仓库kizunadb.git(我猜我的主目录是合乎逻辑的),我希望将其视为“原始”,所有内容都. (根据本次讨论的结论)

不知道如何从一个空的裸仓库开始,然后从其他地方将文件放入其中,我尝试从文件所在的位置开始。我成功地进行了回购/thepath/codebase并提交了所有文件。然后我做了:

cd ~
mkdir kizunadb.git
cd kizunadb.git
git clone --bare /thepath/codebase

嗯......这使得/home/dev/kizunadb.git/codebase.git- 不完全是我的想法。

  1. 我可以从/home/dev/修复位置再次执行此操作,但仍会调用它codebase.git- 如果我只是更改名称,我会破坏它吗?
  2. 然后我如何在它和代码库目录之间交换角色,以便稍后我可以 kizunadb.git to /thepath/codebase获取完整的代码(使用 clone 或 checkout - 不确定此时哪个是正确的命令)?我知道 git 并没有真正有“主要”的概念,但我注意到教程中提到“原始” - 不知道它是如何发挥作用的......
  3. 然后,如何将 repo 克隆到,/thepath/dev这样我就可以在不丢失正在进行的工作的情况下进行分支?(我知道我可以将整个目录移开,克隆 repo,然后覆盖 repo 的文件,但我怀疑有一种更简单的方法。)

如果我以错误的顺序做事,我很乐意重新开始。

4

1 回答 1

2

首先,这会更好:

cd ~
git clone --bare /thepath/codebase kizunadb.git

其次,一个裸仓库是供贡献者推送的。

但是要使用代码库内容正确初始化您的裸仓库,我宁愿遵循“在 git 裸仓库中的“<code>fetch --all”不会将本地分支同步到远程分支”中描述的工作流程:

cd /thepath/codebase
git clone --mirror . ~/kizunadb.git
git push ~/kizunadb.git --mirror 

它可以用一个post-receive钩子来完成,以便到cd第二个非裸仓库并从裸仓库中拉取:在“ --bare 选项是否等于 Git 中的 core.bare 配置? ”中查看更多信息。
这假设/thepath/codebase是一个 git repo。

/thepath/dev将是裸仓库的简单克隆kizunadb.git,供您开发。

git stash将允许您在不丢失正在进行的工作的情况下创建分支。
请参阅“ GIT:在新/dirty/dev 分支中提交对旧/安全分支的更改而不签出或丢失未暂存数据”。


正如您在评论中提到的,对于单个开发人员来说,一个裸仓库可能是多余的。
你可以:

  • 只有一个回购:/thepath/dev
  • git --git-dir=/thepath/dev/.git --work-tree=/thepath/codebase checkout -f每当您要部署代码时,请使用“ ”。

在这种情况下,/thepath/codebase它甚至不会是一个 git repo,而只是一个被视为/thepath/dev部署工作目录的树。

于 2013-04-05T06:06:06.207 回答