如何将简单的非源代码控制的项目备份转换为版本化的git存储库?

9 git version-control

我一直非常顽皮.我一段时间以来一直在开发一个软件(我是唯一的开发人员)(好吧,这是几年的过程),但没有使用任何类型的源代码控制.

从现在开始,我已经决定使用源代码控制(git似乎最有可能,因为Windows工具似乎在过去几个月里出现了很多).我所拥有的是我的(.NET)解决方案的整个目录的备份日期.

我想要做的是自动在修订历史记录中显示我的备份.这将是凌乱的.在解决方案历史记录中添加/删除项目和文件.我并不担心这些问题,因为我知道要重命名的文件被解释为删除文件并添加一个新的,无关的文件.

更普遍的问题是:我有时间订购更改目录的副本.我假设将第一个导入git很容易.但是,我希望所有后续的目录副本按日期顺序合并,一次一个,而不必单独提交每个子目录和文件.

这是可能的,还是只是因为没有使用源代码控制而受到惩罚?

编辑:如果我手动执行'单独提交所有快照'方法(少于20个快照),是否有一种方法(如Esko Luontola建议我可能想要的)覆盖提交日期和我拥有的日期快照.git commit似乎没有允许这样的标志.还有另一种方式(我使用的是Vista)吗?

编辑:回答我使用原始日期的问题:您必须设置GIT_AUTHOR_DATE和/或GIT_COMMITER_DATE环境变量,以覆盖执行提交时当前日期和时间的使用.

有两组变量(还有GIT_(AUTHOR | COMMITER)_(NAME | DATE | EMAIL))的原因是要区分,例如,通过电子邮件发送补丁的作者和实际进行提交的维护者进入回购.

注意在VS上使用git扩展:如果使用'git bash'命令行设置(export varname ="value")这些变量,然后切换回GUI进行提交,它似乎忽略它们.你必须留在命令行并从那里运行'git commit'.

Jak*_*ski 7

您可以使用在git.git存储库中分发的基于git-fast-import的示例工具:( import-zips.py 在Python中)import-tars.perl (在Perl中),或者使用这些脚本作为您自己的导入脚本的基础.您可以在contrib/fast-import/目录中找到这些脚本.


Jim*_*uls 6

可能有一种已经自动执行此操作的方法,但是git应该足够智能,允许您git init使用最旧的备份,然后重复将.git文件夹复制到逐步更新的备份,并为每个备份创建一个提交.编写脚本应该非常简单.

更好的是,您可以将--git-dir=选项或$GIT_DIR环境变量传递给git并让它使用存储库,从而节省复制步骤.

像这样的东西:

cd $FINAL_DIR
git init

export GIT_DIR=$FINAL_DIR/.git

cd $NEXT_BACKUP
git add -A .
git commit
# rinse and repeat
Run Code Online (Sandbox Code Playgroud)