0

我尝试git clone在另一个仓库中创建一个仓库,当我将父仓库提交到 GitHub 时,这些文件不包括在内。

我开发了一些在客户项目中使用的私有 npm 包。客户端需要给定版本的包,我需要一种方法在我的开发计算机上更新这些包(客户端不需要)。我正在尝试实现从我的一些私人 GitHub 存储库到本地客户端存储库的单向(只读)同步。

然后我可以使用npm install /path/to/private/packagewhich 将在本地工作并在部署到生产环境时使用,因为该包将成为客户端存储库的一部分。

我相信 Git 子模块不是我想要的,因为客户需要我的私人仓库的凭据。

可能的?想法?

4

2 回答 2

0

简短的回答,不可能

回答很长,我最终使用了 Git子模块,因为它是让我完全控制包开发版本控制分发的唯一选择。

发展

  • 使用 Git 子模块,每个客户端 repo 都可以包含我的私有包的特定版本。
  • 使用 Git 子模块,我可以轻松地从客户端存储库中修复这些私有包中的错误,并提交可以轻松应用于其他客户端项目的修复。
  • 由于我的私人包托管在私人仓库上,因此只有我(或授权的贡献者)可以提交给他们。

版本控制

  • 鉴于我不使用受限的 npm 注册表(我喜欢开源项目),我可以完全控制包名称和版本控制(尽管不可否认,重新使用名称和版本是一种不好的做法)。

分配

  • 使用 GitHub 部署密钥和 SSH配置文件,我可以轻松地为客户端部署配置部署密钥。

下面是一个私有包的过程,该包被称为添加为client@sunknudsen/logger的 repo 的依赖项。fooacme

在我的开发计算机上

  1. 我使用它创建了一个 SSH 密钥对ssh-keygen -t rsa并为其命名acme-foo-logger-deploy-key
  2. 然后我在 GitHub 上添加一个部署密钥acme-foo-logger-deploy-key.pub并命名它acme-foo-logger(这有助于我记住包的部署位置)。
  3. 然后我cdfoorepo 并运行git submodule add git@github.com:sunknudsen/logger.git ./@sunknudsen/logger以将子模块添加到foorepo(这无需配置 SSH 配置文件即可工作,因为我已经使用SSH auth获得了我的 GitHub 帐户的授权)。
  4. 最后,我运行npm install @sunknudsen/logger以添加@sunknudsen/logger到 repopackage.json并链接本地包。

注意:为了使部署过程易于理解,我运行cp .gitmodules .gitmodules.sample、添加.gitmodules.gitignore指示开发操作在它们README.md运行cp .gitmodules.sample .gitmodules时运行git clone并替换git@github.com:sunknudsen/logger.gitgit@sunknudsen-logger:sunknudsen/logger.gitin .gitmodules

git clone运行后和运行前在 acme 的服务器上npm install

  1. 我上传acme-foo-logger-deploy-key~/.ssh/.
  2. 然后我将以下行附加到~/.ssh/config.
Host sunknudsen-logger
Hostname github.com
IdentityFile ~/.ssh/acme-foo-logger-deploy-key
  1. 最后,我运行git submodule update --init.

接下来是通常的npm install东西。

希望这可以帮助别人!

于 2020-01-24T14:34:18.137 回答
0

您描述的工作流本质上是供应商依赖关系,它不是 Git 原生支持的工作流。Git 确实支持子模块,但它不提供本地支持以供应您自己的另一个存储库的代码。这将删除 Git 旨在保留的历史记录。

似乎有一些模块支持节点项目的供应。例如,有一个名为的模块vendor-copy可以执行此操作,并且看起来它可能对您的情况有用。

于 2020-01-24T03:13:27.933 回答