我有一个包含AngularJS网络应用程序的git repo。
它有一个名为build
的子文件夹,它由gulp任务创建。我正在部署到Azure,因此它直接连接到我的bitbucket目录。
我想将build文件夹作为单独的git repo从中部署Azure应用程序。我如何在git中实现这一点?
答案 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中的错误修复方案中推送提交,这会影响与父层共享的代码?
再次:使用子模块会将代码放在主项目中作为其内容的一部分。将它本地放在文件夹中或将其作为子模块的一部分之间的区别在于,在子模块中,内容被管理(提交)到不同的独立存储库。
这是子模块的一个例子 - 项目在另一个项目中,每个项目都是一个独立的项目。
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],但我发现解决方案是了解子模块的工作原理。这是简体的简体中文版本。
$ git innit
)对其进行了初始化,如果您添加了另一个初始化的存储库作为子模块,则可能会出错。$rm -rf git
),这将删除git跟踪的文件-或在添加之前到回购删除初始化$ git diff / $ git diff --cached / $ git diff - - submodule
到底发生了什么,文档将指导您完成操作 $ 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