对于git,确切的`svn export`等效命令?

kno*_*cte 6 svn git version-control

git 没有完全相同的 svn export命令?真?

注意:这不是一个重复的问题.也就是说,我已经知道并测试了这些命令:

  • git clone --depth 1 < - 仍然下载.git文件夹.
  • git checkout-init < - 不适用于远程仓库,它适用于工作副本(因此您需要先克隆).
  • git archive< - 这将是一个完美的解决方案,因为它有一个--remote参数,但它只有两种可能的格式:tar或zip,所以我需要在下载后解压缩/解压缩,为此我需要一个管道(|),但是我在窗户上!(不是*n?x)
  • git clone --bare < - 我仍然不知道这是什么,但这不是我需要的.

请赐教我svn export在git中有真正的替代品吗?

Bru*_*uno 13

如何快速克隆而不进行历史记录修订?:

git clone --depth 1 your_repo_url
Run Code Online (Sandbox Code Playgroud)

然后,从rmdir文档:

rd /s /q .git
Run Code Online (Sandbox Code Playgroud)

  • 不确定你是否理解`--depth`的作用:它不会下载所有版本:它重建了一个"假"历史记录,只是假装每次都添加新文件.您不会下载任何超过存档的内容. (6认同)
  • 停止提议 - 深度,它已经在问题中提到了! (2认同)
  • stackoverflow不是关于礼貌,而是关于正确性 (2认同)

Dan*_*Ray 10

问题是"如何使用git进行svn-style'导出?" 就像问"我怎样才能改变我的篮球轮胎?".你不能,但这不是篮球的错.是的,它是橡胶和充满空气,但相似之处到此为止.

您只需要使用svn"export",因为它会使用.svn目录污染每个子目录.Git不这样做,所以你真的不需要它.克隆是一个导出,只是在根目录下有一个目录,所有存储库业务都存在于该目录中.

最简单的方法是克隆repo,然后从repo的顶层删除.git目录.这样做,它不再是一个回购,它只是一个独立的文件目录.

或者,你知道,一起忽略git并只使用你克隆下来的文件.这也有效.

  • 不相关:删除.git文件夹并不能节省宝贵的时间和带宽,而不是首先将其下载. (2认同)
  • 除非您的repo在其历史记录中包含大量二进制文件,否则repo本身仅比检出的工作目录大一些.此外,我几乎可以保证你花费更多的时间和带宽来抱怨这个,就像你使用工具一样. (2认同)
  • DanRay停止假设该工具的目的.如果我打算用它来下载数千个git存储库,那么带宽节省是有道理的,对吧? (2认同)
  • 我觉得除了"这里是如何使git执行就像你喜欢的工具一样"之外没有任何答案会满足...... git和svn在设计和实现之间都是非常不同的. (2认同)
  • 这是我读过的*最愚蠢的类比之一.对于这个特定的任务(只下载文件,而不是历史记录,针对特定的修订版),它使各种直观的感觉期望具有原子提交的修订控制系统具有完成它的命令.使用`svn export`的原因是专门获取没有*历史记录的修订*的副本.因此,告诉某人克隆,获取带有*历史记录的副本*,然后忽略该历史记录,充其量只是居高临下.此外,从2011年发布的1.7版本开始,SVN不再使用.svn文件夹污染每个目录. (2认同)

Kin*_*nch 9

只需删除工作副本中的存储库.

git clone remote
rm -Rf .git
Run Code Online (Sandbox Code Playgroud)

(在Windows上,它是rd /s /q.感谢@Bruno的提示.)

  • 当然,@ knocte可以直接添加,不一定是个坏主意.但是,`git`从根本上遵循unix方法,即为你需要做的每件小事做一个小命令,然后你就可以把它组合起来.有些人喜欢这种做法,有些则不喜欢.我不认为`git clone --depth`后跟`rmdir`是你能得到的最难命令的组合.即使有可能有限的命令行环境(例如Windows的`cmd`),也不是那么难.在一个命令中执行它可能会更好,但我不确定它是否值得这样争论...... (2认同)

小智 3

在 GitHub 等某些主机上,您可以精确地指定svn export.

例子:

svn export https://github.com/GNOME/banshee/branches/master
Run Code Online (Sandbox Code Playgroud)

甚至是部分的!(存储库的某些子部分)

例子:

svn export https://github.com/liferay/liferay-portal/branches/6.1.x/tools
Run Code Online (Sandbox Code Playgroud)

对于您自己的存储库,您应该创建一些 GitHub 存储库并将其添加为远程存储库:

git remote add github https://github.com/<user>/<repo>.git
Run Code Online (Sandbox Code Playgroud)

然后

git push github <branch>
Run Code Online (Sandbox Code Playgroud)

现在您可以按照上述方式进行部分结帐。

更新:看起来这个功能即将停止

  • @knocte,问题是这个答案没有回答问题。“svn导出”在 GitHub 上工作的事实与你想用 Git 做的事情无关,它与 GitHub 还提供了一个 Subversion 服务有关,该服务是一个 [Git 存储库的桥梁](https:// /github.com/blog/626-announcing-svn-support)。但它仍然是一台 Subversion 服务器,而不是 Git 服务器。 (3认同)