随着我的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。
答案 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版本的日期 - 它们都将用当前日期标记日期。但是,该功能很容易添加。