Git在提交之间保存原始文件

Git在提交之间保存原始文件,git,difference,repo,Git,Difference,Repo,我想保存/导出两个选定提交之间不同的文件。以下命令显示修改过的文件 $ git diff-tree --no-commit-id --name-only -r bd61ad98 index.html javascript/application.js javascript/ie6.js 但是有一种方法可以导出它们,保留文件结构吗? 我只需要将修改后的文件保存在web服务器中,而不是上载整个项目。请参阅 应该这样做。请参阅 应该这样做。请参阅 应该这样做。请参阅 应该这样做。这只是一个小型she

我想保存/导出两个选定提交之间不同的文件。以下命令显示修改过的文件

$ git diff-tree --no-commit-id --name-only -r bd61ad98
index.html
javascript/application.js
javascript/ie6.js
但是有一种方法可以导出它们,保留文件结构吗? 我只需要将修改后的文件保存在web服务器中,而不是上载整个项目。

请参阅

应该这样做。

请参阅

应该这样做。

请参阅

应该这样做。

请参阅


应该这样做。

这只是一个小型shell脚本的种子(将其保存在文件中并使文件可执行)。这不是一个完整的脚本。您需要检查命令行中是否提供了
$1
,否则将以错误消息中止(否则脚本的其余部分将以错误消息失败)。无论它位于何处以及从何处调用它,它都需要工作(只有当当前目录是项目目录时,它才工作)。它需要以某种方式处理已删除的文件(它们是否由
git diff tree
命令返回?)


这只是一个小型shell脚本的种子(将其保存在文件中并使文件可执行)。这不是一个完整的脚本。您需要检查命令行中是否提供了
$1
,否则将以错误消息中止(否则脚本的其余部分将以错误消息失败)。无论它位于何处以及从何处调用它,它都需要工作(只有当当前目录是项目目录时,它才工作)。它需要以某种方式处理已删除的文件(它们是否由
git diff tree
命令返回?)


这只是一个小型shell脚本的种子(将其保存在文件中并使文件可执行)。这不是一个完整的脚本。您需要检查命令行中是否提供了
$1
,否则将以错误消息中止(否则脚本的其余部分将以错误消息失败)。无论它位于何处以及从何处调用它,它都需要工作(只有当当前目录是项目目录时,它才工作)。它需要以某种方式处理已删除的文件(它们是否由
git diff tree
命令返回?)


这只是一个小型shell脚本的种子(将其保存在文件中并使文件可执行)。这不是一个完整的脚本。您需要检查命令行中是否提供了
$1
,否则将以错误消息中止(否则脚本的其余部分将以错误消息失败)。无论它位于何处以及从何处调用它,它都需要工作(只有当当前目录是项目目录时,它才工作)。它需要以某种方式处理已删除的文件(它们是否由
git diff tree
命令返回?)

使用

-0 arg表示未压缩的存档文件;我还没有测试过,但这应该可以用

-0 arg表示未压缩的存档文件;我还没有测试过,但这应该可以用

-0 arg表示未压缩的存档文件;我还没有测试过,但这应该可以用



-0 arg表示未压缩的存档文件;我还没有测试出来,但这应该可以

您可以使用命令将输出写入txt文件line@unixmiah但如果我也有二进制文件,比如一个图像,会发生什么呢?也。。。我可以使用命令行保存目录结构吗?您可以使用命令将输出写入txt文件line@unixmiah但如果我也有二进制文件,比如一个图像,会发生什么呢?也。。。我可以使用命令行保存目录结构吗?您可以使用命令将输出写入txt文件line@unixmiah但如果我也有二进制文件,比如一个图像,会发生什么呢?也。。。我可以使用命令行保存目录结构吗?您可以使用命令将输出写入txt文件line@unixmiah但如果我也有二进制文件,比如一个图像,会发生什么呢?也。。。我可以使用命令行保存目录结构吗?我可以把它放在哪里,在git终端中,或者我需要创建一个脚本?我想你应该一次又一次地做同样的操作,而不是只做一次。文件是放置它的最佳位置。您可以将所有这些放在.sh文件中。确保在.sh文件上运行chmod a+x,以便运行其可执行文件;例如project-diff.sh。然后进入终端并发出sh./project-diff.sh或sh project-diff.sh将代码转换成一个小的shell脚本,添加了一些关于它不起作用的解释。我可以把它放在哪里,在git终端中,或者我需要创建一个脚本?我想你想一次又一次地做同样的操作,而不是只做一次。文件是放置它的最佳位置。您可以将所有这些放在.sh文件中。确保在.sh文件上运行chmod a+x,以便运行其可执行文件;例如project-diff.sh。然后进入终端并发出sh./project-diff.sh或sh project-diff.sh将代码转换成一个小的shell脚本,添加了一些关于它不起作用的解释。我可以把它放在哪里,在git终端中,或者我需要创建一个脚本?我想你想一次又一次地做同样的操作,而不是只做一次。文件是放置它的最佳位置。您可以将所有这些放在.sh文件中。确保在.sh文件上运行chmod a+x,以便运行其可执行文件;例如project-diff.sh。然后进入终端并发出sh./project-diff.sh或sh project-diff.sh将代码转换成一个小的shell脚本,添加了一些关于它不起作用的解释。我可以把它放在哪里,在git终端中,或者我需要创建一个脚本?我想你想一次又一次地做同样的操作,而不是只做一次。文件是放置它的最佳位置。您可以将所有这些放在.sh文件中。确保在.sh文件上运行chmod a+x,以便运行其可执行文件;例如project-diff.sh。然后进入终端并发出sh./project-diff.sh或sh project-diff.sh将代码转换成一个小的shell脚本,添加了一些关于它不起作用的解释。
git diff-tree --no-commit-id --name-only -r $commit \
| xargs git archive -o changedfiles.tgz -- 
#!/bin/bash

commit=$1            # get the commit hash from the command line (the first argument)
dest='/tmp'          # path to your destination directory (change it to match your setup)

# Cleanup on the destination directory
rm -rf $dest
mkdir $dest

# Copy the modified files
for i in $(git diff-tree --no-commit-id --name-only -r $commit); do
  cp --parents $i $dest/
done
git diff-tree --no-commit-id --name-only -r bd61ad98 | git archive --format zip --output "proj-diff.zip" master -0