如何使用包含顺序版本代码的现有文件快速实现Git

时间:2014-01-04 16:52:34

标签: git version-control

随着我的R代码变得越来越长并且难以管理,我正在尝试实施Git来改进我的工作流程。

我目前使用“另存为”和有意义的文件名保存代码的顺序版本,例如'Mycode - ver 0.1.01','Mycode - ver 0.1.02',....,'Mycode - ver 0.1.25'。这可能是我们许多人在使用任何版本控制系统之前会做的事情。

我做了什么:

我开始通过创建存储库迁移到Git,将所有 25个R脚本复制到文件夹中,然后依次从最早到最近提交每个文件。

问题:

我觉得我错误地做了这件事:我认为没有一个文件夹包含一个带有25个修订版本的R-script(应该是正确的方法),我真的创建了一个包含25个单独文件的文件夹。

因此,我的问题是:有没有办法快速正确地将我的代码的所有25个版本都放到Git中?

此时,我只能想到创建一个空文件,将所有25个文件的内容一次一个地剪切并粘贴到其中并依次提交每个文件。这显然是耗时且容易出错的。

在开始之前,我浏览了Git文档(至少在分支上的chp 3)和许多在线教程。虽然他们介绍了基本的Git概念,例如Git如何通过每次提交,Git分支,合并等来获取存储库中文件的快照,当我在像我这样的项目的 middle 中时,我找不到有关如何迁移的资源情况。

如果我的理解不正确,我谦卑地请求任何更正。提前谢谢!

暂且不说:我使用的是SmartGit,因为SO中的评论很容易学习,但我对使用Bash或任何其他GUI客户端的建议持开放态度。

编辑:

我在Windows XP上运行Git。

3 个答案:

答案 0 :(得分:0)

也许其他人可以帮助你使用Windows脚本,但是如果你有bash,你可以做类似的事情:

find -iname 'MyCode*' | sort | while read f; do
      cat "${f}" > MyCode.r; git add MyCode.r; git commit -a -m "$f";
done

答案 1 :(得分:0)

从你的问题看,你正在处理一个文件的二十五个版本,所以我认为就是这种情况。我认为在这么简单的情况下将修订版本放到git中的最简单方法是使用shell编写脚本,基于一个类似于

的循环。
for x in `seq 1 25`; do
    cp "Mycode - ver 0.1.`printf '%02d' "$x"`" "Mycode"
    git add "Mycode"
    git commit -m "revision $x"
done

当然,时间戳将全部荒谬地靠近在一起。你可以做一些较低级别的git-fiddling来修复它,但它需要“历史记录重写”,所以在上传到公共仓库之前做它

编辑:显然,通过一些轻微的语法更改,您可以在Windows批处理文件中轻松编写相同的脚本。如果你留在同一个目录中,你不必担心反斜杠与正斜杠目录分隔符等...

答案 2 :(得分:0)

这个答案是针对bash的。只要您安装了realpath,它就可以在任何操作系统上运行。

你只需要一个简单的脚本。希望按照上次修改日期(使用ls -tr,如我在此处所做的)或按名称以相反顺序对文件进行排序,应按正确的顺序列出。像这样:

#! /bin/bash
orig_dir="$(realpath $1)"
desired_repo_name="$2"
desired_filename="$3"
mkdir "$desired_repo_name"
cd "$desired_repo_name"
git init
for file in $(ls -tr $orig_dir/*); do
  cp "$file" "$desired_filename"
  git add "$desired_filename"
  git commit -m "Importing from $file"
done

使脚本可执行(我不确定在Windows上的Cygwin上是否有必要):

chmod +x script.sh

运行它:

./script.sh A B C

其中A是包含原始文件的目录,B是所需的存储库文件夹(脚本将创建该文件夹),C是用于文件所有版本的文件名。

此脚本没有正确标记git版本的日期 - 它们都将用当前日期标记日期。但是,该功能很容易添加。