0

我在 Git 中有我的 .dotfiles(.zshrc、.bashrc 等)。

我想在plugins子目录中有一些额外的存储库(也来自我)——我确实有一个用于我的 Emacs 配置的自定义存储库,另一个用于我的 LaTeX 配置等。

将它们创建为子模块是否有意义?我的意思是:我也可以将其用作工作副本,并直接从子模块中编辑我的 LaTeX 配置吗?

还是我在这里混合一些东西?(我想避免在我的机器上为每个子模块 repo 使用相同或几乎相同内容的 2 个目录——并且我希望我的子模块始终处于最新版本,或者几乎是最新版本。)

更新

我确实在/usr/me/.dotfiles.

如果我将子模块放入/usr/me/.dotfiles/plugins(例如)中,我的优势是在克隆时可以同时获取所有其他拼图,但我知道我不能直接在那里编辑这些文件,对吧?然后,这是一个问题......因为我确实有“任务文件”,例如,当我重新安排事情时会对其进行编辑。

为了正确编辑这些,我必须去/usr/me/dev/repo-task-files......根本不实用......

现在,我可以将普通的 repos 放入 中/usr/me/.dotfiles/plugins,尽管不能作为子模块。这意味着,在其他机器上,我必须手动(或通过脚本)将不同的 repos 克隆到同一个地方,但这不是单行操作(克隆点文件时)。

但是,然后,我可以直接在文件所在的位置编辑文件。

我改进的问题:上面的描述对吗?有第三种方法吗?

4

1 回答 1

0

更新

将它们创建为子模块是否有意义?我的意思是:我也可以将其用作工作副本,并直接从子模块中编辑我的 LaTeX 配置吗?

是的,子模块旨在用作独立的存储库。在子模块中提交更改与在 repo 的另一个本地副本中进行更改完全相同。唯一的区别是您将在超级存储库中进行未提交的更改。

如果我将子模块放在 /usr/me/.dotfiles/plugins 中(例如),我的优势是在克隆时可以同时获取所有其他拼图,但我知道我不能直接在在那里,对吧?

您可以像编辑任何其他 git 存储库一样编辑子模块。

现在,我可以将普通的 repos 放在 /usr/me/.dotfiles/plugins 中,尽管不能作为子模块。这意味着,在其他机器上,我必须手动(或通过脚本)将不同的 repos 克隆到同一个地方,但这不是单行操作(克隆点文件时)。

这种方法的问题是“子存储库”中的任何更改都会出现在两个存储库中。子项目的文件夹将被视为超级项目中的另一个跟踪目录。

当一个 repo 看到它的子模块发生变化时,它会报告一个修改过的文件:

$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)
  (commit or discard the untracked or modified content in submodules)

        modified:   plugins/LaTeX (new commits, modified content)

原始答案

关于子模块的事情是您将存储库的特定版本绑定到超级项目。如果您继续开发子模块,并做出会破坏父模块的更改怎么办?

通过使用子模块,您可以确保始终有一个工作版本。

无论如何,您都不应该关心在本地拥有多个存储库副本。

如果您担心在获取时浪费带宽,您可以将远程添加到指向另一个本地副本的存储库。

于 2017-07-06T20:35:37.990 回答