【问题标题】:git subtree/submodule a file from a repository and update itgit subtree/submodule 来自存储库的文件并更新它
【发布时间】:2015-12-24 17:07:27
【问题描述】:

假设我将我的 zsh 点文件保存在一个 repo 中:

$  tree -a -F .
.
├── .zlogin
├── .zsh/
│   ├── some-dir/
│   │   └── another-script.zsh
│   └── some-script.zsh
└── .zshrc

我对使用来自另一个项目的子目录很感兴趣,例如来自oh-my-zsh 的目录lib 并将它放在我的.zsh 文件夹中。

最终结果应该是这样的:

$  tree -a -F .
.
├── .zlogin
├── .zsh/
│   ├── lib/
│   │   ├── bzr.zsh
│   │   ├── clipboard.zsh
│   │   ├── compfix.zsh
│   │   ├── completion.zsh
│   │   ├── correction.zsh
│   │   ├── diagnostics.zsh
│   │   ├── directories.zsh
│   │   ├── functions.zsh
│   │   ├── git.zsh
│   │   ├── grep.zsh
│   │   ├── history.zsh
│   │   ├── key-bindings.zsh
│   │   ├── misc.zsh
│   │   ├── nvm.zsh
│   │   ├── prompt_info_functions.zsh
│   │   ├── spectrum.zsh
│   │   ├── termsupport.zsh
│   │   └── theme-and-appearance.zsh
│   ├── some-dir/
│   │   └── another-script.zsh
│   └── some-script.zsh
└── .zshrc

但我不想只下载和复制目录,我希望能够自动更新它,而不必在我的项目中保留整个 oh-my-zsh 存储库。我该怎么做?

【问题讨论】:

    标签: git git-submodules git-subtree


    【解决方案1】:

    我有一个简单但笨拙的答案和一个更“优雅”但复杂的答案。

    我的笨拙的解决方案是将整个 oh-my-zsh 存储库放在一个子模块中,该子模块位于“subs”之类的顶级文件夹中。然后从 .zsh 目录中符号链接到 lib 目录...

    user@host:~/.zsh>  ln -s ../subs/oh-my-zsh/lib
    

    是的,我觉得在输入这样的答案后我应该洗手。可以说更优雅的选项涉及对特定文件夹设置为可见的子模块的稀疏签出。这是这种方法的excellent explanation

    不幸的是,我认为稀疏检出不适用于您的特定情况,因为您希望 lib 目录驻留在 .zsh 目录中,该目录是您的存储库的一部分。据我所知,如果不提交对子模块存储库的更改,就不能在子模块中拥有自己的代码。话虽如此,这就是我们正在谈论的 Git,而且 Git 足够神奇,它可能有办法做到这一点。

    如果是我,我会拼凑起来并称其为好。 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-20
      • 2019-08-16
      • 1970-01-01
      • 1970-01-01
      • 2015-01-23
      • 2015-01-31
      • 2014-09-06
      相关资源
      最近更新 更多