Git:只签出没有存储库的文件?

Max*_*Max 35 git

我想只检查没有.git文件和整个存储库的文件.这是因为我想用git管理一个网站(php和html),我正在寻找一种简单的方法来从存储库更新htdocs文件夹中的文件,而不需要公开存储库.(现在它在home-dir中并通过ssh访问,但我必须手动将新文件放到htdocs中.

Jak*_*ski 33

git的存档手册页包含了下面的例子:

git archive --format=tar --prefix=junk/ HEAD | (cd /var/tmp/ && tar xf -)

创建一个tar存档,其中包含当前分支上最新提交的内容,并将其解压缩到'/ var/tmp/junk'目录中.

或者你可以使用低级git-checkout-index,该manpage包含以下示例:

使用git checkout-index"导出整个树"

前缀能力基本上使得' git checkout-index'作为"导出为树"功能变得微不足道.只需将所需的树读入索引即可

   $ git checkout-index --prefix=git-export-dir/ -a
Run Code Online (Sandbox Code Playgroud)

git checkout-index 将索引"导出"到指定的目录中.

最后的"/"很重要.导出的名称实际上只是以指定的字符串为前缀.

或者您可以尝试使用--work-treegit包装器或GIT_WORK_TREE环境变量选项,例如使用" git --work-tree=/somwehere/else checkout -- .".

  • git-archive非常适合这个.此外,您还可以使用git archive --remote直接从远程仓库构建存档(甚至通过git:// protocol iirc),因此可以将其用作直接从中心点获取的方式.例如`git archive --remote git://git/mindy.git --format tar r3.2.0 | tar tf -`(如果你在git-daemon配置中启用upload-archive) (4认同)
  • @araqnid可能很酷,但不适用于Github:使用ssh URL`无效命令:'git-upload-archive`,同时使用https URL:`fatal:协议不支持操作. (4认同)

sea*_*ges 10

为此,Git比Subversion容易得多,因为整个存储库都保存在一个目录中.您只需要删除项目根目录中隐藏的".git"文件夹,即可创建站点的生产就绪副本.

在Linux/OSX中,这将是:

mkdir dist && cd dist
git checkout --depth=1 http://path/to/your/project.git
rm -rf .git
Run Code Online (Sandbox Code Playgroud)

  • 这有复制整个历史的缺点......如果它是一个大型回购和网络,它可能会很慢. (4认同)
  • 我对此答案所做的唯一修改是使用“--深度=1”来防止下载整个历史记录。由于`.git`最终会被删除,所以使用`--depth=1`可以跳过最终不会保留的信息的传输,并且不会改变最终结果。至于这个答案的用处:我更愿意使用“git archive”,但正如[该答案](/sf/answers/200712011/)下所指出的*Github不支持“git” archive`* 所以我不能使用它。下一个最好的事情是 `git checkout --depth=1 ... && rm -rf .git` (2认同)

Jon*_*cer 8

git clone --depth 1完全符合你的要求.我有一个拥有41,000次提交的git存储库,这个速度要快得多.有关更详细的说明,请参阅此答案更一般的答案.

如果要指定要使用的分支(而不是默认的"master"分支),请使用此语法(需要Git 1.9+):

git clone -b <remoteBranch> --single-branch --depth 1 ssh://username@servername.net:serverport/PathToProject <FolderName>
Run Code Online (Sandbox Code Playgroud)


Sve*_*ach 5

您可以在git工作目录中创建tar存档并将tar复制到服务器:

git archive -o foo.tar HEAD
scp foo.tar server:
Run Code Online (Sandbox Code Playgroud)