git subree / submodule来自存储库的文件并更新它

时间:2015-12-24 17:07:28

标签: git git-submodules git-subtree

让我们说我将zsh dotfiles保存在回购中:

$  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 repo。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

我有一个简单而又狡猾的答案和一个更“优雅”但复杂的答案。

我的kludgy解决方案是将整个oh-my-zsh repo放在顶级文件夹中的子模块中,如“subs”或类似的东西。然后从.zsh目录中的符号链接到lib目录...

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

是的,在打出这样的答案后,我觉得我应该洗手。可以说更优雅的选项涉及一个子模块的稀疏检验,其中特定文件夹设置为可见。以下是此方法的excellent explanation

不幸的是,我不认为稀疏结账会在您的特定情况下起作用,因为您希望lib目录驻留在存储库中的.zsh目录中。据我所知,如果不将更改提交给子模块repo,则不能在子模块中拥有自己的代码。话虽如此,这是我们正在讨论的Git,Git非常神奇,可能有办法实现这一点。

如果是我,我会把它弄好并称之为好。 :)