【问题标题】:Migrate from flatfiles (library.01.pm, library.02.pm ...) to Git从平面文件(library.01.pm、library.02.pm ...)迁移到 Git
【发布时间】:2016-10-18 11:43:49
【问题描述】:

我开始在负责的开发人员不使用版本控制的遗留环境中工作。 他有点使用自己的版本控制,以升序方式保存写入的文件。

例如:

第一个版本:Library.01.pm

第二版:Library.02.pm

目前所有内容都保存在一个可以嵌套的文件夹中。

->libs(目录)

--> parser.pm(文件)

--> 配置(目录)

----> general.pm(子目录中的文件)

等等。

我们的目标是将我们的“版本控制”带到 Git。我们目前的想法是采用现有版本和子目录结构并为每个版本进行提交。 我们尝试了 git-fast-import,但无法使用现有的文件夹结构。无论如何,这可能是错误的方法。

你觉得这个想法怎么样?

【问题讨论】:

  • “负责任的开发者没有使用版本控制” - 负责任的开发者总是使用版本控制。
  • 我完全同意你的看法......好吧,他们使用了自己的“版本控制”。

标签: git perl version-control migration


【解决方案1】:

我会使用 perl 读取文件结构并编写一个可以在 git bash(perl 也附带)中重放的新脚本。

这是一个可以工作的脚本示例

我从旧文件结构和 git 结构开始,仅作为目录结构。从我的 git 文件夹中,我使用 find 命令查找旧结构中的所有文件,然后在 perl 脚本中遍历它们。

G01103266@BDSPUKL70343008 /cygdrive/c/work/temp/git
$ find ../old/
../old/
../old/libs
../old/libs/config
../old/libs/config/config_file_01.pm
../old/libs/config/config_file_02.pm
../old/libs/config/config_file_03.pm
../old/libs/lib_file.01.pm
../old/libs/lib_file.02.pm
../old/libs/lib_file.03.pm

然后使用 perl 脚本:

#!/usr/bin/perl

use strict;
use English;

print "hello greg\n";

undef $/;

my $content = <ARGV>;
my @files = split(/\n/,$content);
for my $tag ('01','02','03') {
        for my $file (@files) {
                if ($file =~ /$tag/) {
                        my $newFile = $file;
                        $newFile =~ s/_$tag//sg;
                        $newFile =~ s/..\/old\///sg;
                        print "cp$_  $file  $newFile\n";
                }
        }
        print "git add --all\n";
        print "git commit -a -m \"commint from tag $tag\"\n";
}

其中创建以下重播脚本:

G01103266@BDSPUKL70343008 /cygdrive/c/work/temp/git
find ../old/ | ../import.pl
hello greg
cp  ../old/libs/config/config_file_01.pm  libs/config/config_file.pm
cp  ../old/libs/lib_file.01.pm  libs/lib_file.01.pm
git add --all
git commit -a -m "commint from tag 01"
cp  ../old/libs/config/config_file_02.pm  libs/config/config_file.pm
cp  ../old/libs/lib_file.02.pm  libs/lib_file.02.pm
git add --all
git commit -a -m "commint from tag 02"
cp  ../old/libs/config/config_file_03.pm  libs/config/config_file.pm
cp  ../old/libs/lib_file.03.pm  libs/lib_file.03.pm
git add --all
git commit -a -m "commint from tag 03"

【讨论】:

  • 谢谢。实际上,由于您的想法,我们做了类似的事情。我们使用 git-fast-import 的想法有点错误。
猜你喜欢
  • 2018-06-19
  • 2022-11-19
  • 2012-01-26
  • 1970-01-01
  • 2012-10-20
  • 1970-01-01
  • 2017-11-09
  • 1970-01-01
  • 2016-11-27
相关资源
最近更新 更多