输入项目的文件夹复制版本列表以自动构建Git存储库?

时间:2016-12-22 21:36:40

标签: git version-control automation version version-control-migration

所以在过去的几年里,我非常喜欢在我的所有编码项目中学习和使用Git。我喜欢明确所有变化的时间表,并了解何时进行了更改。

好吧,我已经打开了一个早于Git使用的旧项目。我基本上有一个文件夹列表,每个'提交'我随着时间的推移。我一共有70多个版本。我希望能够轻松地存储这个项目,同时保持所有步骤而不会浪费大量空间。

是否有自动执行此操作的方法?我想自动做的主要是以下几点:

文件夹:

- '2013_08_01'
- '2013_08_04'
- '2013_08_12'
- ... and many many more (*~70)

导入Git仓库(单分支):

- Base commit A (+ note of date) of '2013_08_01'
- Commit B with changes (+ note of date) of '2013_08_04'
- Commit C with changes (+ note of date) of '2013_08_12'
- ...

如果不手动执行此操作,完成此操作的快速方法是什么?所有文件夹都在同一本地磁盘上。

2 个答案:

答案 0 :(得分:1)

这个单行将做你想做的事情

git init repo && ls -1d 2* | sort | xargs -i[] sh -c 'find repo -mindepth 1 -not -path repo/.git -not -path repo/.git/\* -exec rm -rf {} + && cp -r []/. repo/ && git -C repo add -A && git -C repo commit -am "Commit version []" && git -C repo tag "[]"'

答案 1 :(得分:0)

这是一个脚本,我把它放在一起应该做的工作:

#!/bin/bash

source=$1
dest=$2

cd $dest
git init

cd $source

for i in *
do
  cd $dest

  # Remove old version, see https://stackoverflow.com/a/22347541/2747593
  git rm -rf .
  git clean -fxd

  # Add next version.
  cp -R $source/$i/. ./
  git add -A
  git commit -m "Auto import to Git, from folder $i"
done

将其运行为:

script.sh /path/to/source /path/to/dest

您可以使用mv代替cp,但我heard /.语法不能与mv一起使用。 (同样使用cp会在出现错误的情况下保留原始文件。)

要记住的另一件事是,根据项目的类型,可能有一些你不想被Git跟踪的文件。 (例如二进制文件。)您可能希望在导入旧副本之前添加.gitignore;如果是这样,请相应地修改脚本。

感谢@Vampire在原始版本的脚本中指出了一些错误。