在另一个git仓库中维护一个Git仓库

时间:2016-03-26 14:30:48

标签: git github

我有一个包含AngularJS网络应用程序的git repo。

它有一个名为build的子文件夹,它由gulp任务创建。我正在部署到Azure,因此它直接连接到我的bitbucket目录。

我想将build文件夹作为单独的git repo从中部署Azure应用程序。我如何在git中实现这一点?

3 个答案:

答案 0 :(得分:30)

您有以下几种选择:

  • 子模块
  • 子树
  

Submodules 允许将外部存储库嵌入到源树的专用子目录 中,总是指着一个特定的提交。

git submodule

将你的大项目分解为子项目,就像你到目前为止一样 现在使用以下命令将每个子项目添加到主项目中:

git submodule add <url>

将项目添加到您的仓库后,您必须初始化并更新它。

git submodule init
git submodule update

Git 1.8.2 添加了新选项--remote

git submodule update --remote --merge

fetch 每个子模块中上游的最新更改 merge them in check out 子模块的最新版本。

正如the docs所描述的那样:

  

--remote

     

此选项仅对更新命令有效。不使用超级项目记录的SHA-1来更新子模块,而是使用子模块的远程跟踪分支的状态。

这相当于在每个子模块中运行git pull。

  

但是,如何在C中的错误修复方案中推送提交,这会影响与父层共享的代码?

再次:使用子模块会将代码放在主项目中作为其内容的一部分。将它本地放在文件夹中或将其作为子模块的一部分之间的区别在于,在子模块中,内容被管理(提交)到不同的独立存储库。

这是子模块的一个例子 - 项目在另一个项目中,每个项目都是一个独立的项目。

enter image description here

git subtree

Git子树允许您将任何存储库作为另一个存储库的子目录插入

submodule非常相似,但主要区别在于管理代码的位置。在子模块中,内容放在一个单独的仓库中,并在那里进行管理,允许您将其克隆到许多其他仓库。

subtree 正在将内容作为根项目的一部分进行管理,而不是在单独的项目中。

不是写下如何设置它并理解如何使用它,你可以简单地阅读这篇能够解释它的优秀文章。

https://developer.atlassian.com/blog/2015/05/the-power-of-git-subtree/

答案 1 :(得分:9)

你可以用git子模块或子树来做这个,我使用子模块就是出于这种原因。

https://git-scm.com/docs/git-submodule

示例:

/mainrepository
/mainrepository/subrepository

cd /mainrepository/subrepository;
git init .
cd ../
git submodule add ./subrepository

then open seperate remote repository in bit bucket then 
cd into ./subrepository
git remote add origin https://bitbucket.com/path/to/subrepository.git

基本上就是这一切。

我没有关于我知道的子树的详细信息,它比子模块更先进。但如果您的需求基本上与子模块匹配,则很容易维护。

答案 2 :(得分:0)

尽管有关此文档的内容很广泛[https://git-scm.com/book/en/v2/Git-Tools-Submodules],但我发现解决方案是了解子模块的工作原理。这是简体的简体中文版本。

  1. 如果您有主存储库,则已经用git($ git innit)对其进行了初始化,如果您添加了另一个初始化的存储库作为子模块,则可能会出错。
  2. 如果添加已经具有初始化git repo的子模块,则可能要删除git跟踪(将$ cd插入子模块,然后$rm -rf git),这将删除git跟踪的文件-或在添加之前到回购删除初始化
  3. 如果已缓存文件,请检查$ git diff / $ git diff --cached / $ git diff - - submodule到底发生了什么,文档将指导您完成操作
  4. 如果您的子模块没有被跟踪(这是我的挑战),则文档建议创建一个单独的分支并将该分支合并至master-这就是我所做的一些步骤,此处未包含在文档中因为文档假定您对git有一定程度的了解,所以花了我一段时间才弄清楚了我开始学习git时遗漏的所有步骤。
    $ git checkout -b stable (create a new branch called stable)
    $ git checkout stable (check into the new branch)
    $ cd .. (into your branch with the submodules)
    $ git submodule update --remote --merge (update and merge the submodule to the remote branch)
    $ git add . (add all files and directories  to the branch)
    $ git commit -m”adds submodule to new branch” (commit changes in the branch)
    $ git push (push changes in the branch) - this will remind you make the stable branch your upstream 
    $ git push --set-upstream origin stable (set upstream to your new branch)
    $ git checkout master (checkout into the master branch)
    $ git merge stable (merge pushed changes from branch to master)
    $ git add . 
    $ git commit -m”adds submodules from merged stable branch”
    $ git push origin master
  • 进入您的在线仓库,并检查文件是否存在。
  • 如果这不是您面临的挑战(将一个已初始化的git模块添加到存储库中),那么阅读文档有些麻烦,但是如果您解决了挑战,则值得。希望这对将已初始化的git子模块添加到主git仓库中的人有所帮助。