我有一个包含LaTeX项目的存储库,其中包含从.tex文件编译和生成的.pdf。我希望历史记录和源文件是私有的,但.pdf应该是公共的并且具有固定的URL。 GitHub本身为单个文件提供了一个固定的URL,但是为了使其公开可用,我需要将存储库设置为公共,这也将历史记录和所有其他文件公开给公众。
你认为有一种方法我可以让GitHub(或BitBucket,或......)将单个.pdf文件推送到其他地方,以便它具有固定的唯一公共URL吗?我以为我可以以某种方式将它推送到AWS的S3或让Lambda接收HTTP呼叫并获取单个文件但是我可能更容易知道。
答案 0 :(得分:2)
继续关闭Max的答案,一个解决方案可能是维护单独的私人和公共回购。我喜欢这个选项,因为你不必介绍其他服务。您的工作流程可能如下所示:
对于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 Pro和CircleCI等其他工具可以执行此操作。
答案 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页面,该页面会自动下载最新版本的文件,因为它是所服务的文件。然而,存储库是私有的,甚至文件的名称也会发生变化,所以没有人看到它。