设置我的git起始状态有点迷失 - 我确定这只是一些简单的命令,但是

时间:2013-04-05 05:59:18

标签: git

上下文:

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

最终我想要一个名为kizunadb.git的裸仓库(我想我的主目录是合乎逻辑的),我希望将其视为“原始”,其中所有内容都来自克隆。 (根据this discussion)的结论

不知道如何从一个空的裸仓库开始,然后从其他地方把文件放入其中,我尝试从文件所在的位置开始。我成功地在/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 /thepath/codebase完成代码 (使用克隆或结帐 - 不确定哪个是正确的命令)?我知道git并不是真的有“主要的”这个概念,但我注意到教程中的参考文献是“原创” - 不知道它是如何起作用的......
  3. 然后,如何将回购克隆克隆到/thepath/dev,这样我就可以在不丢失正在进行的工作的情况下进行分支? (我知道我可以移动整个目录,克隆存储库,然后覆盖repo的文件,但我怀疑有一种更简单的方法。)
  4. 如果我以错误的顺序做事,我很高兴重新开始。

1 个答案:

答案 0 :(得分:2)

首先,这会更好:

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

其次,一个简单的回购是供贡献者推进的。

但是要使用代码库内容正确初始化您的裸仓库,我宁愿遵循" fetch --all” in a git bare repository doesn't synchronize local branches to the remote ones"中描述的工作流程:

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

可以使用post-receive挂钩完成cd到第二个非裸仓库并从裸仓库中取出:在" Is --bare option equal to core.bare config in Git?& #34 ;.
假设/thepath/codebase是一个git repo。

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

git stash将允许您在不丢失正在进行的工作的情况下进行分支 请参阅" GIT: commit changes to old/safe branch while in new/dirty/dev branch without checking out or losing unstaged data"。


正如您在评论中提到的那样,对于单个开发人员来说,一个简单的回购可能是多余的。
你可以:

  • 只有一个回购:/thepath/dev
  • 使用" git --git-dir=/thepath/dev/.git --work-tree=/thepath/codebase checkout -f"无论何时你想部署代码。

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