【问题标题】:How do I use GitHub-API to add a folder?如何使用 GitHub-API 添加文件夹?
【发布时间】:2017-01-30 15:37:28
【问题描述】:

上下文:我有一个带有 mongo db 的节点应用程序。 db 包括 2 个结构,代表一个文件/文件夹系统。基本上,具有表示文件夹的树结构和表示文件的内容结构。

我们的想法是使用 GitHub api 的 js 包装器 API 将其放入 GitHub(希望如此)。

问题:我真的不明白 GitHub API 会如何接受这些信息。

  • (a) 使用 Git cli 时,我从 git init 开始,它设置了开始的 git。
    这一步在哪里?
  • (b) 查看here,可以通过编程方式创建一个repo。太棒了。
    那么,文件和文件夹(隐喻地)现在被推送到这个 repo 中的想法是不是不需要git init 步骤?
  • (c) 我知道被推送的不是文件和文件夹,而是提交。正在发生的是内容可寻址的密钥对。

谁能解释一下这如何映射到看起来像这样的工作流程:

  1. 新建项目 => 创建仓库
  2. 设置一些文件和文件夹 => 推送更改
  3. 进行一些更新 => 推送更改 ...

文件夹的工作原理让我很困惑。
任何指针将不胜感激。

【问题讨论】:

    标签: git github-api


    【解决方案1】:

    DVCS (Decentralized VCS) 背后的想法是您需要将本地提交发布到远程仓库。

    因此,虽然您需要 GitHub API 来创建远程存储库,但您只需要 Git(而不是 GitHub API)在本地添加和提交,然后是 push to the remote

    【讨论】:

    • 抱歉,我上面可能没有说清楚。由于这一切都发生在应用程序内部,因此没有本地 git 对象。所以没有本地提交,相反,我必须跟踪 mongo db 中的所有内容。所以我不能在本地添加和提交。这个问题差不多。
    • @TathagatBanerjee 然后这个应用程序需要创建一个本地仓库,在里面生成正确的文件,添加,提交和推送。
    • 这是不正确的。请看下文。我特别遇到了无法创建本地存储库的用例。这适用于位于云中的应用程序。
    • @TathagatBanerjee 您的回答涉及在 GitHub 上创建新的存储库。 Mine 解决了该新存储库中数据的发布问题:通过本地克隆(可以在您的云环境中完成的克隆)
    • 恕我不同意。使用本地克隆会导致问题。 - 首先,您会将本地克隆放在云端的什么位置?在公共文件夹中?该应用程序位于云中,公共文件夹可能会被擦除。 - 另外,然后执行 git init 序列,具体取决于您可能无法访问 cli 的环境? - 你会每次都手动检查本地仓库吗?或者从 github 下载现在创建的 repo,将其初始化到 public 文件夹中?如果我一开始没有正确表达我的问题,请为此道歉。感谢您最初查看问题。
    【解决方案2】:

    使用 GitHub API 创建存储库 备注

    • 简单的答案是没有文件夹可以这么说 GitHub,因此无法创建。
    • 花哨的答案是github是一个内容可寻址的键值 系统,因此每个人都没有文件夹。
    • 也没有文件,需要注意的是,一切都是可提交的 blob 基本上。

    如何使用以上信息: (1) 从 Meteor(我的用例)创建一个新的 repo。

    导出 const insertRepo = new ValidatedMethod({ 名称:'repos.insert', 验证:RepoSchema.validator(), 跑({ 回购常规设置, }) { 如果(流星.isServer){ 常量方法 = 'POST'; 常量 url = 'https://api.github.com/user/repos'; 常量令牌 = Meteor.settings.private.github.token; 常量头 = { '用户代理':'Meteor/1.0', '授权':令牌, }; 常量数据 = repoGeneralSettings; return HTTP.call(method, url, { headers, data }); } }, });

    (2) 这看起来像:

    POST /user/repos HTTP/1.1 主办方:api.github.com 授权: 缓存控制:无缓存 邮递员令牌:39be029f-817e-62fb-c07b-3fedf69200d4 { "name": "TestRepo1", "description": "这是一个测试仓库", "主页": "https://www.example.com", “私人”:假, “has_issues”:假, “has_wiki”:错误, “has_downloads”:是的, “自动初始化”:真 }

    (3) 并且会像这样返回 201:https://developer.github.com/v3/repos/#response-2

    (4) 删除也挺simple。请注意,授权(非常明显)在与令牌相关的 api 中,根据 comment。这给我带来了一些问题,因为我一直在尝试更改所有者的权限,而需要发生的是更改授权令牌的权限。忽略以下设置,不要尝试在 createRepo 调用中进行设置。

    【讨论】:

      猜你喜欢
      • 2017-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-05
      • 1970-01-01
      • 2010-12-31
      • 2021-11-01
      相关资源
      最近更新 更多