我的项目结构看起来像这样。
所有项目(project1,herokurails1和herokurails2正在积极开发中)。
我想在一些git主机位置有一个存储库,例如github.com,甚至是办公室里的本地git服务器。每当代码在 / repo / 中的任何地方发生变化时,我希望能够运行“ git push github master ”并拥有我的整个 / repo / 树推到了github。
但是,我还希望能够将我的rails应用程序部署到heroku.com,而无需将整个repo / *树推送到每个heroku应用程序。 e.g。
这可能吗?我需要设置一些特殊的东西才能实现这一目标吗?还是我坚持使用多个git存储库?
答案 0 :(得分:4)
这会很快变得非常笨拙(特别是因为Git不会让你像svn那样推拉子目录)
我会考虑不使用Github来存储项目。 Bitbucket或CodebaseHQ等工具具有不同的定价模式,可能更适合您,并为您提供所需的简单性。
或者,看看像Gitosis这样的东西,可以通过像Gitlab
这样的工具制作非常Github式的东西。答案 1 :(得分:2)
你可以在本地使用git subtree
来维护一个git存储库,该存储库从较大的repo
存储库中拆分,并从该拆分存储库中推送。坦率地说,我要么使用Adam Dymitruk suggests之一的免费服务,要么只是向GitHub支付一些费用 - 毕竟它们确实提供了优质的服务......
答案 2 :(得分:1)
如果您愿意,如果您不想支付任何费用,可以使用unfuddle或bitbucket。使用子模块在github上托管大型文件,如图像,第三方dll,视频等。这些将不会持有IP。
答案 3 :(得分:0)
如何将每个单独的项目放在不同的分支中?到目前为止它对我很好。我有一个webProjects的私人仓库,每个分支都从master开始,它有我的web项目模板(也可能是空分支),每次我有新项目我只是创建一个基于master的分支,项目名称和cary工作正常
答案 4 :(得分:0)
这个问题不再有意义,因为GitHub现在允许用户免费拥有无限的存储库,但是无论如何我都会分享我的知识,因为我认为有人会发现这个有趣的。
问题是,您可以拥有一个包含多个项目的存储库,而无需使用git submodule
创建任何其他存储库。通常,为了使用git子模块,您必须为每个子模块都有一个存储库,但是我意识到,与其为要包含在存储库中的每个项目创建一个单独的存储库,还可以重用要包含的存储库。像这样投影:
创建一个存储库,其中将包含GitHub上的多个项目。
为了得到这个答案,我们假设此存储库位于https://github.com/example/example.git
在本地克隆该存储库:
git clone https://github.com/example/example.git
为您要拥有的每个项目创建一个(最好是孤立的)分支:
git checkout --orphan project_1/master
git commit -m "First commit of project_1/master"
git push --set-upstream origin project_1/master
git checkout --orphan project_2/master
git commit -m "First commit of project_2/master"
git push --set-upstream origin project_2/master
git checkout --orphan project_3/master
git commit -m "First commit of project_3/master"
git push --set-upstream origin project_3/master
在分支母版中为每个项目添加一个子模块,指定正确的分支:
git checkout master
git submodule add --branch project_1/master -- https://github.com/example/example.git project_1
git submodule add --branch project_2/master -- https://github.com/example/example.git project_2
git submodule add --branch project_3/master -- https://github.com/example/example.git project_3
提交并推送:
git commit -m "Added 3 projects to the repository"
git push
现在,您可以像使用各自存储库中的每个项目一样使用该存储库中的每个项目。但是,每次创建新分支时,都必须在项目的分支文件夹下创建它。例如,如果要在project_1中创建分支“ new_feature”,则必须执行以下操作:
git branch 'project_1/new_feature'
如果要在其他任何地方下载项目,则可以:
克隆项目本身,什么也没做:
git clone --branch project_1 https://github.com/example/example.git ./project_1
或者如果您想同时使用多个项目,则克隆整个存储库,然后仅下载实际要使用的项目的内容:
git clone https://github.com/example/example.git
git submodule init project_1 project_3
git submodule update --remote
如果您总是将
git submodule update
与--remote
一起使用,您可能还想执行以下命令以在您从主存储库git status
时停止显示项目的名称:git submodule foreach 'git -C $toplevel config --file .gitmodules submodule.$name.ignore all'
feature
project_1/feature
git subtree
:我已经知道此工具是为特定目的而创建的,但是它有一些缺点,我不知道如何使用它。