嵌套存储库并独立制作它们pullable/deployable?
Nesting repositories and make them independently pullable/deployable?
我不确定以下做法是否合理(如果不合理,我将不胜感激)但我希望嵌套存储库的结构与下面的树类似。
github
│
└── main-repo
├── django
│ ├── django-project-1
│ └── django-project-2
└── react
├── react-project-1
└── react-project-2
这背后的想法是在我的计算机中为我的练习项目建立一个集中目录,便于查找、访问和维护。
出于与上述相同的原因,我也希望在 GitHub 中拥有相同的(镜像)树结构,而不是拥有多个 GH 存储库。
虽然我可以将其作为带有子目录的单个存储库来完成,但我希望所有这些子项目都是 'independent',这意味着能够单独提取它们,甚至可以单独部署它们以供我练习目的。
到目前为止,我尝试独立初始化它们,但我认为这对我来说不是我正在寻找的东西(即我仍然无法从 GitHub 如此初始化的子目录中提取)。
我也查看了 submodules,但除非我错了,否则我认为它们不是我正在尝试做的事情的正确选择。
这是可行的吗?
I would as well like to have this same (mirroring) tree structure in GitHub for the same reasons described above, rather than having multiple GH repos.
实现这一点的方法是将所有历史记录放在一个 repo 中,并将它们作为子模块检出。这就是您所拥有的,以及子模块是什么:作为更大努力的一部分,您感兴趣的独立更新的历史记录。帮助程序命令对此没有自动化,但设置很简单。
因此,这是一个完整的重置,它构建了您描述的回购设置,同时避免假设您未在此处指定的任何细节,以使下面的命令无论如何都能工作。
cd `mktemp -d`; git init # we're going to build a specific branch setup
(cd /path/to/main-repo; find -name .git -prune -o -print | cpio -pd ~-)
for d in {django,react}/*-project-*; do
(cd $d; git init; git add .; git commit -m-)
git submodule add ./$d
done
现在您已经设置了嵌套存储库,但每个项目都添加为子模块。将历史提升到你的主仓库中,
for d in {django,react}/*-project-*; do
git fetch ./$d
git branch ${d##*/} FETCH_HEAD
done
现在您的项目存储库中的每个签出提示都有一个非常普通的分支。编辑 .gitmodules
文件并将所有 url 设置为 ./
只是为了清洁。
现在提交结果。
当您克隆这个构建的 repo 时,您将获得主分支和每个子模块的分支,即项目历史。要设置子目录又名项目又名项目子模块,
git worktree add django/django-project-1 django-project-1
# etc.
或像上面那样自动执行,
for d in {django,react}/*-project-*/; do
git worktree add $d ${d##*/}
done
在这里的任何地方你都可以做 git submodule init
。现在您已经有了一个新克隆的存储库,将您所有的独立项目历史记录作为子模块,全部放在一个整洁的包中。
我不确定以下做法是否合理(如果不合理,我将不胜感激)但我希望嵌套存储库的结构与下面的树类似。
github
│
└── main-repo
├── django
│ ├── django-project-1
│ └── django-project-2
└── react
├── react-project-1
└── react-project-2
这背后的想法是在我的计算机中为我的练习项目建立一个集中目录,便于查找、访问和维护。
出于与上述相同的原因,我也希望在 GitHub 中拥有相同的(镜像)树结构,而不是拥有多个 GH 存储库。
虽然我可以将其作为带有子目录的单个存储库来完成,但我希望所有这些子项目都是 'independent',这意味着能够单独提取它们,甚至可以单独部署它们以供我练习目的。
到目前为止,我尝试独立初始化它们,但我认为这对我来说不是我正在寻找的东西(即我仍然无法从 GitHub 如此初始化的子目录中提取)。
我也查看了 submodules,但除非我错了,否则我认为它们不是我正在尝试做的事情的正确选择。
这是可行的吗?
I would as well like to have this same (mirroring) tree structure in GitHub for the same reasons described above, rather than having multiple GH repos.
实现这一点的方法是将所有历史记录放在一个 repo 中,并将它们作为子模块检出。这就是您所拥有的,以及子模块是什么:作为更大努力的一部分,您感兴趣的独立更新的历史记录。帮助程序命令对此没有自动化,但设置很简单。
因此,这是一个完整的重置,它构建了您描述的回购设置,同时避免假设您未在此处指定的任何细节,以使下面的命令无论如何都能工作。
cd `mktemp -d`; git init # we're going to build a specific branch setup
(cd /path/to/main-repo; find -name .git -prune -o -print | cpio -pd ~-)
for d in {django,react}/*-project-*; do
(cd $d; git init; git add .; git commit -m-)
git submodule add ./$d
done
现在您已经设置了嵌套存储库,但每个项目都添加为子模块。将历史提升到你的主仓库中,
for d in {django,react}/*-project-*; do
git fetch ./$d
git branch ${d##*/} FETCH_HEAD
done
现在您的项目存储库中的每个签出提示都有一个非常普通的分支。编辑 .gitmodules
文件并将所有 url 设置为 ./
只是为了清洁。
现在提交结果。
当您克隆这个构建的 repo 时,您将获得主分支和每个子模块的分支,即项目历史。要设置子目录又名项目又名项目子模块,
git worktree add django/django-project-1 django-project-1
# etc.
或像上面那样自动执行,
for d in {django,react}/*-project-*/; do
git worktree add $d ${d##*/}
done
在这里的任何地方你都可以做 git submodule init
。现在您已经有了一个新克隆的存储库,将您所有的独立项目历史记录作为子模块,全部放在一个整洁的包中。