git - 获取特定文件/文件夹的所有先前版本

weixin_38053088 2019-09-12 03:29:21

我想检索全部旧版本的特定文件在git存储库中。 我发现使用checkout命令可以得到一个特定的版本,但我希望它们都可以。而具有depth选项的git clone命令似乎不允许我克隆子文件夹(“无效的存储库名称”)。 你知道这是可能的吗? 谢谢






...全文
903 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38065057 2019-09-12
  • 打赏
  • 举报
回复

OP想要检索所有版本,但答案不会实现。特别是如果该文件有数百个修订(所有建议都过于人工)。唯一的半工作解决方案是由@Tobias在注释中提出的,但是建议bash循环会以随机顺序构建文件,以及在对我们的回购使用时会产生数百个空文件。其中一个原因是“rev-list - all --objects”会列出不同的对象(包括树木 - 但对我们的目的无用)。 我从Tobias的解决方案开始,添加了计数器,清理了一下,最终以下面列出的bash脚本的形式重新发明了轮子。 该脚本将: - 提取所有文件版本到/ tmp/all_versions_exported - 以1个参数 - 相对路径git仓库里面的文件 - 给结果档案名称的数字前缀(排序) - 在结果文件提到检查文件名(从橘子:) 分辨苹果 - 提到在结果文件名提交日期(见下面的输出例子) - 不创建空的结果文件 猫在/ usr/local/bin目录/ git_export_all_file_versions ​​ 用例: cd /home/myname/my-git-repo git_export_all_file_versions docs/howto/readme.txt result stored to /tmp/all_versions_exported ls /tmp/all_versions_exported 0001.17-Oct-2016.ee0a1880ab815fd8f67bc4299780fc0b34f27b30.readme.txt 0002.3-Oct-2016.d305158b94bedabb758ff1bb5e1ad74ed7ccd2c3.readme.txt 0003.29-Sep-2016.7414a3de62529bfdd3cb1dd20ebc1a977793102f.readme.txt 0004.28-Sep-2016.604cc0a34ec689606f7d3b2b5bbced1eece7483d.readme.txt 0005.28-Sep-2016.198043c219c81d776c6d8a20e4f36bd6d8a57825.readme.txt 0006.9-Sep-2016.5aea5191d4b86aec416b031cb84c2b78603a8b0f.readme.txt <and so on and on . . .> 编辑:如果你看到象这样的错误: 致命的:不是有效的对象名称 3e93eba38b31b8b81905ceaa95eb47bba ed46494:readme.txt 这意味着您已经从git项目的根文件夹启动脚本。
weixin_38073873 2019-09-12
  • 打赏
  • 举报
回复

所有文件的版本已经在git仓库,当你的Git克隆它。您可以创建一个特定的收银台相关联的分支承诺: git checkout -b branchname {commit#} 这可能足以满足变化的快速和肮脏的人工比较: 结帐分支 复制到编辑缓冲区 这可能是好的,如果你只有几个版本需要关注,不介意一点手动,尽管git内置命令。 对于脚本解决方案,在其他答案中已经提供了其他一些解决方案。
weixin_38075729 2019-09-12
  • 打赏
  • 举报
回复

git rev-list --all --objects -- path/to/file.txt 列出了与回购路径 相关联的所有斑点获得文件的特定版本 git cat-file -p commitid:path/to/file.txt (的commitid可以是任何东西 象征REF(分支,标签名称;远程) a commit hash 像HEAD〜3,BRANCH1 @ {4}等进行修订规范
weixin_38102914 2019-09-12
  • 打赏
  • 举报
回复

的文件有时旧版本只能通过git reflog。最近我遇到了一个情况,那就是我需要挖掘所有提交,即使是在交互式重新绑定期间由于意外覆盖而不再是日志的一部分的提交。 我写了这个Ruby脚本来输出文件的所有以前的版本来找到孤立的提交。 grep这个输出很容易找到我丢失的文件。希望它能帮助别人。 #!/usr/bin/env ruby path_to_file = "" `git reflog`.split("\n").each do |log| puts commit = log.split(" ").first puts `git show #{commit}:#{path_to_file}` puts end 同样的事情可以用git log完成。
weixin_38109674 2019-09-12
  • 打赏
  • 举报
回复

德米特里提供的脚本确实解决了这个问题,但它有一些问题导致我使它适应了我的需要。具体来说: 由于我的默认日期格式设置打破了git show的使用。 我希望按日期顺序排序结果,而不是反向日期顺序。 我希望能够针对从回购库中删除的文件运行它。 我不希望所有分支上的所有修订;我只是想从HEAD中获得修改。 我希望它错误,如果它不是在一个混帐回购。 我不想编辑脚本来调整某些选项。 它的工作方式效率低下。 我不需要输出文件名中的编号。 (适当格式的日期可以达到同样的目的。) 我想更安全的“带空格的路径”处理 你可以看到最新的版本我修改in my github repo或这里的精选版本在写这篇文章的: #!/bin/sh # based on script provided by Dmitry Shevkoplyas at http://stackoverflow.com/questions/12850030/git-getting-all-previous-version-of-a-specific-file-folder set -e if ! git rev-parse --show-toplevel >/dev/null 2>&1 ; then echo "Error: you must run this from within a git working directory" >&2 exit 1 fi if [ "$#" -lt 1 ] || [ "$#" -gt 2 ]; then echo "Usage: $0 <relative path to file> [<output directory>]" >&2 exit 2 fi FILE_PATH="$1" EXPORT_TO=/tmp/all_versions_exported if [ -n "$2" ]; then EXPORT_TO="$2" fi FILE_NAME="$(basename "$FILE_PATH")" if [ ! -d "$EXPORT_TO" ]; then echo "Creating directory '$EXPORT_TO'" mkdir -p "$EXPORT_TO" fi echo "Writing files to '$EXPORT_TO'" git log --diff-filter=d --date-order --reverse --format="%ad %H" --date=iso-strict "$FILE_PATH" | grep -v '^commit' | \ while read LINE; do \ COMMIT_DATE=`echo $LINE | cut -d ' ' -f 1`; \ COMMIT_SHA=`echo $LINE | cut -d ' ' -f 2`; \ printf '.' ; \ git cat-file -p "$COMMIT_SHA:$FILE_PATH" > "$EXPORT_TO/$COMMIT_DATE.$COMMIT_SHA.$FILE_NAME" ; \ done echo exit 0 输出的例子: $ git_export_all_file_versions bin/git_export_all_file_versions /tmp/stackoverflow/demo Creating directory '/tmp/stackoverflow/demo' Writing files to '/tmp/stackoverflow/demo' ... $ ls -1 /tmp/stackoverflow/demo/ 2017-05-02T15:52:52-04:00.c72640ed968885c3cc86812a2e1aabfbc2bc3b2a.git_export_all_file_versions 2017-05-02T16:58:56-04:00.bbbcff388d6f75572089964e3dc8d65a3bdf7817.git_export_all_file_versions 2017-05-02T17:05:50-04:00.67cbdeab97cd62813cec58d8e16d7c386c7dae86.git_export_all_file_versions
内容概要:本文提出了一种基于改进扩散模型的高海拔地区新能源高波动出力场景生成方法,并提供了完整的Python代码实现。该方法针对高海拔地区风能、光伏等新能源出力波动剧烈、不确定性高的特点,通过优化扩散模型的结构与训练策略,有效捕捉历史数据的概率分布特征与时序相关性,从而生成高质量、多样化的出力场景。文中详细阐述了模型的数学推导、网络架构设计、损失函数优化及采样算法改进,并通过实验证明其在拟合精度、场景多样性与稳定性方面优于传统生成模型,为电力系统在高比例新能源接入下的规划、调度与风险评估提供了可靠的场景输入支持。; 适合人群:具备一定Python编程能力和机器学习基础,从事新能源发电预测、电力系统分析、智能优化、场景生成等方向研究的科研人员、高校研究生及工程技术人员。; 使用场景及目标:①用于高海拔地区风电、光伏出力的不确定性建模与多场景生成;②支撑含高渗透率新能源的电力系统随机优化调度、鲁棒决策与风险评估;③为相关学术研究、论文复现与算法改进提供可运行的技术方案与代码基础; 阅读建议:建议读者结合所提供的完整资源(代码、数据集、说明文档)进行实践操作,重点关注扩散模型的前向加噪与反向去噪过程的设计细节,以及如何将其适配于新能源时序数据的生成任务,通过参数调优与对比实验深入理解模型的生成机制与性能边界。
内容概要:本文围绕基于静态约束法的配电网电动汽车接入容量评估展开研究,提出了一种在新型电力系统背景下评估主动配电网对电动汽车承载能力的方法。研究通过构建数学模型,结合潮流计算与关键约束条件(如电压越限、线路过载等),量化分析配电网可承受的最大电动汽车充电负荷容量,旨在识别规模化电动汽车接入带来的潜在运行风险,并为电网规划与运行提供科学依据。文中配套提供了完整的Matlab代码实现,便于仿真验证与结果复现。此外,该研究与分布式光伏承载力评估、电动汽车可调能力分析等方向形成技术联动,展现了多主题协同的研究体系。; 适合人群:具备电力系统分析基础理论知识及Matlab编程能力的高校研究生、科研机构研究人员,以及从事新能源并网、智能配电网规划与运行等相关领域的工程技术人员。; 使用场景及目标:①用于学术研究中的模型复现与论文撰写支撑;②评估实际配电网中电动汽车大规模接入的可行性与安全边界,指导充电基础设施布局;③作为高校教学案例,帮助学生深入理解电网承载力评估的核心原理、建模方法与仿真技术; 阅读建议:建议结合文中提及的相关研究方向(如二阶锥规划、多面体聚合方法等)进行对比学习,充分利用所提供的Matlab代码与网盘资料开展仿真实验,重点关注约束条件的设定逻辑与潮流计算模块的实现细节,以深化对评估模型机理与工程应用价值的理解。

477

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧