git对应`svn export`的命令或者github的解决方案

4

我希望从Git存储库中获取一个单独的文件。使用SVN,我可以使用以下命令: svn export,具体如下:

sudo svn export http://www.example.com/repos/Trunk/pathtofile/file.ext

这只是裸的文件下载,即没有任何仓库信息。 Git中是否有类似于“svn export”的功能? 我找到的最接近的是“git show upstream/master:pathtofile/file.ext”,但这并不是等效的,因为你已经需要在一个Git仓库内才能使用它。另一个选择是,因为我正在使用GitHub,可以尝试通过“wget”获取github原始文件。
wget https://raw.github.com/<mygithubuser>/repo/master/pathtofile/file.ext?login=<mylogin>&token=<notsurewhattoputhere>

问题在于代码库是私有的,因此我需要提供一个令牌,但我不确定如何生成并在 wget 中使用它。


1
可能重复?https://dev59.com/xHNA5IYBdhLWcg3wBo5m - sascha
我同意,它与https://dev59.com/gF3Ua4cB1Zd3GeqP-TVc相似...但它并不是那个问题的翻版,我在那里找不到解决方案。 - Tom
https://dev59.com/03VC5IYBdhLWcg3w21Iq#19689284 - Anthony Hatzopoulos
3个回答

2

点赞了GitHub支持SVN的链接!这是一个不太为人知的事实。 - Arnab Datta

2

我没有核实过,但根据这个 Github 页面,你的身份验证令牌是在你的个人资料页面上提供的。因此,假设可以手动将其嵌入命令中,那么我会选择这样做。否则,我想你可能需要将其作为包含此命令的脚本的参数接受,或者可能在配置文件中。虽然我猜这两个选项都可能存在安全问题。


那个 Github 页面看起来非常有前途。不幸的是,尽管我按照规定使用了令牌,但我无法让 wget 正常工作。 - Tom
1
奇怪的是,该页面似乎暗示令牌基础身份验证应该在任何地方都可以工作。不过我自己没有访问任何私有存储库来测试。你运行 wget 时是否将 URL 放在引号中?只是问一下,因为这是我常犯的错误,我注意到你上面的示例命令中缺少引号。 - obmarg
另外,您尝试过将用户名和令牌作为POST参数提供吗?似乎这就是该链接示例使用curl的-F参数所做的。 - obmarg
是的,是的,是的 - 当我在运行wget时将URL括在引号中时,它起作用了。我不知道那是必要的。谢谢@obmarg。 - Tom
没问题。这是必需的,因为shell将&(可能还有?)视为特殊字符,所以您需要转义它们或将整个参数括在引号中,就像如果url包含空格一样。 - obmarg
这太棒了。我不知道这个存在。我已经利用它来添加一个更安全的答案。 - rynop

1

我不会把令牌和用户名放在查询字符串中,而是采取像这样的做法:

curl -F 'login=mylogin' -F 'token=mytoken' https://raw.github.com/<mygithubuser>/repo/master/pathtofile/file.ext > /tmp/file.ext

关于为什么不应该把它放在 QS 中这是一个很好的解释

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接