所以在过去的几年里,我非常喜欢在我的所有编码项目中学习和使用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'
- ...
如果不手动执行此操作,完成此操作的快速方法是什么?所有文件夹都在同一本地磁盘上。
答案 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)
这是一个bash脚本,我把它放在一起应该做的工作:
#!/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在原始版本的脚本中指出了一些错误。