Git:管理推送活动

时间:2018-03-20 15:23:40

标签: git github githooks git-push

我有一个包含LaTeX项目的存储库,其中包含从.tex文件编译和生成的.pdf。我希望历史记录和源文件是私有的,但.pdf应该是公共的并且具有固定的URL。 GitHub本身为单个文件提供了一个固定的URL,但是为了使其公开可用,我需要将存储库设置为公共,这也将历史记录和所有其他文件公开给公众。
你认为有一种方法我可以让GitHub(或BitBucket,或......)将单个.pdf文件推送到其他地方,以便它具有固定的唯一公共URL吗?我以为我可以以某种方式将它推送到AWS的S3或让Lambda接收HTTP呼叫并获取单个文件但是我可能更容易知道。

3 个答案:

答案 0 :(得分:2)

继续关闭Max的答案,一个解决方案可能是维护单独的私人和公共回购。我喜欢这个选项,因为你不必介绍其他服务。您的工作流程可能如下所示:

  1. 在私人仓库中本地编辑PDF
  2. 将更改提交给您的私人仓库
  3. 有一个post-commit git hook将已编译的PDF复制到您当地的公共仓库
  4. 从您当地的公共仓库推送到Github
  5. 对于post-commit钩子,在git post-commit目录中创建一个名为.git/hooks(无扩展名)的文件。然后简单地在该文件中放入一个bash命令,将PDF从私有仓库复制到公共仓库,例如:cp ~/private-repo/document.pdf ~/public-repo/document.pdf

答案 1 :(得分:2)

您可以在私有存储库上使用GitHub页面来实现此目的。来自the documentation

  

GitHub Pages网站在互联网上公开发布,即使他们的存储库是私有的。

您可以将代码提交到master分支,并让CI工具运行构建步骤,强制删除源文件并将PDF全部提交到gh-pages分支。如果这是用户页面(例如username.github.io存储库),则同样适用,但GitHub页面是从master分支构建的,因此您需要使用类似release的内容分支为你的构建工具听。

我使用similar workflow使用Travis从.tex文件构建PDF。源是公共的,但工作流适用于私有存储库。唯一的问题是Travis公共版本无法在私有存储库上运行,但Travis ProCircleCI等其他工具可以执行此操作。

答案 2 :(得分:1)

好的,这就是我如何解决的问题(非常感谢@cmbuckley指出我正确的方向)。

我使用TeX项目在存储库中创建了一个非常简单的index.html文件:

<html>
<head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
</body>
</html>
<script>
    $(document).ready(function() {
        var link=document.createElement('a');
        link.href = "EXISTING_FILE_NAME";
        link.download = "NEW_FILENAME";
        link.click();
    });
</script>

然后我设置了存储库来为git-page提供master分支。然后我使用自己的域并在CloudFlare上创建了一个子域,它拥有我的域名的NameServers,指向我的GitHub页面,并设置 存储库中的相同子域作为我的自定义域地址。

现在发生的是:用户转到自定义子域,他获取index.html页面,该页面会自动下载最新版本的文件,因为它是所服务的文件。然而,存储库是私有的,甚至文件的名称也会发生变化,所以没有人看到它。