Git - 包含来自其他存储库的文件

标签 git workflow organization

使用 Git,我想在我的项目中包含一些通用的 JS/CSS 库和/或实用程序方法(即来自另一个存储库的特定文件),我希望它们总是最新的。我真的不想要整个远程存储库。如果我可以处理远程文件的“本地副本”并将更改推送回去,那就更棒了。

一个有点类似的例子:在 ASP.NET 中,我会通过引用 ("remote") 其他库的 .dll 文件(没有“copy local "),这样每当我重新编译外部库时,我的项目就会指向最新版本。

示例场景

我的项目是...MyProject,我只想要来自外部存储库 ExternalLibraryExternal2 的几个文件。我不想将每个存储库克隆到其他地方并将文件复制粘贴到我的存储库中。如果我对 MyProject/scripts/common1.js 进行了改进,我想将其推回到 ExternalLibrary

  1. 我的项目/
    • index.html
    • 脚本/
      • mycode.js
      • 其他插件.js
      • common1.js <-- 来自 ExternalLibrary
      • plugin2.js <-- 来自 ExternalLibrary
    • 样式/
      • mystyle.css
      • common.css <-- 来自 External2
  2. 外部图书馆/
    • common1.js
    • plugin1.js
    • plugin2.js
    • 一群废话...
  3. 外部2/
    • common.css
    • 一群废话...

相关引用:

最佳答案

Git 不支持在远程项目中选择文件。您可以使用子树选择您想要的文件,然后想出某种策略将其重新放入,但这通常很复杂,尤其是当您突然决定需要比最初选择的文件更多的文件时。

我通常最终做的是使用 symlinks .这可以通过将项目添加为项目中的子模块,然后将文件符号链接(symbolic link)到正确的位置来完成。

你的例子应该是这样的:

$ git clone <url> myproject
$ cd myproject
$ git submodule add <url> external_library
$ git submodule add <url> external2
$ cd scripts
$ ln -s ../external_library/common1.js
$ ln -s ../external_library/plugin2.js
$ cd ../styles
$ ln -s ../external2/common.css

要让符号链接(symbolic link)在 Windows 中工作:

然后在您进行任何更改之前,我会去创建一个新分支:

$ cd external_library
$ git checkout -b myproject
# make changes back in ../myproject
$ git commit <files> # in external_library

然后您可以将您的分支推送到 github 或其他地方,并向作者提交 pull 请求,以便回馈您的更改。

您可以像这样保持同步:

$ cd external_library
$ git checkout master
$ git pull
$ git checkout myproject
$ git merge master

您还需要在子模块更改时更新父项目(例如 git commit external_library )。任何使用你的项目的人都需要做一个 git clone --recursive <url_to_myproject> .

注意:您可以在不为项目使用单独的分支的情况下实现其中的大部分。使用对您最有意义的任何内容。

关于Git - 包含来自其他存储库的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14831877/

相关文章:

workflow - 需要有关 Alfresco 工作流程的帮助

git - git 中的 "Virtual"或 "view"分支(在 github 上)

.net - 根据父子数据绘制树形图或组织图

svn - 这是创建具有多个项目和供应商的 SVN 存储库的正确分步和组织吗?

git 告诉我所有的文件在添加和暂存后都是新的

android - Eclipse Android 和 gitignore

git - 如何为文档创建空分支

git remote prune – 显示的修剪分支没有我预期的那么多

php - PHP 中的用户状态工作流引擎

c++ - 计算机中的文件组织/位置