gpt4 book ai didi

git - 复制文件及其整个历史

转载 作者:太空狗 更新时间:2023-10-29 13:27:56 25 4
gpt4 key购买 nike

我和另一个开发人员正在开发一个由其他代码访问的 API。当我们更改 API 的行为以更好地满足我们的需求时,我们发布了 API 的其他版本而不弃用旧版本,这样使用 API 的现存应用程序就不必立即更新。例如:

$ cat 0.5.php
<?php
$username = $_POST['name'];
?>

$ cat 0.6.php
<?php
$username = $_POST['username'];
?>

当我们开始一个新版本时,通常我们会将版本 N-1.php cp 到 N.php 并从那里编码。但是,如果我们使用 Git 这样做,那么我们将丢失整个 blamediff 以及文件中的其他历史记录以供比较和还原。 如何将旧文件的历史“伪造”到新文件中,例如 blamelogdiff 等命令“正常工作”而不向它们显示额外的标志或参数,例如 --follow?

最佳答案

您想使用 -C 标志。这将检测副本以及重命名,因此它可以跟踪历史。 diffblamelog 接受这个标志。

就像@madara-uchiha 所说的:你应该考虑使用标签,也许可以从它们生成你的 git-x.y 文件。您可以使用类似下面的方法来获取给定标记处的文件内容:

git show v0.6:git.php > git-0.6.php

v0.6 是您感兴趣的标签。

更新:

这里有一个小脚本可以做到这一点。第一个假定您的标签的格式为 x.yx.y.z:

#!/bin/bash
versions=$(git tag -l | egrep -o '^[0-9]+\.[0-9]+(\.[0-9]+)?$')
for version in $versions
do
git show $version:git.php > git-$version.php
done

如果你的标签是 vX.YvX.Y.Z 的形式并且你想要 git-x.y.phpgit-x.y.z.php 作为文件名,这有效:

#!/bin/bash
versions=$(git tag -l | egrep -o '^v[0-9]+\.[0-9]+(\.[0-9]+)?$')
for version in $versions
do
git show $version:git.php > git-${version/#v/}.php
done

将此脚本作为发布过程的一部分运行,它将为您生成所有版本。此外,从名称中删除 git- 也很容易。例如,> git-$version.php 变成了 > $version.php

关于git - 复制文件及其整个历史,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17343266/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com