我有大约160k的提交,每个提交3个文件正在更新(使用github作为网站),我正在寻找获取文件的方法,以便我可以将内容放入真正的数据库中。< / p>
我的问题是如何从每次提交中获取(下载?)更新的文件,将它们保存到名称附加时间戳/ commitSHA的文件夹中,以避免命名冲突。
这可以用git吗?我知道我可以使用github网站查看文件以及发生了哪些变化,但问题是有超过160k的提交。
答案 0 :(得分:1)
获得存储库*的本地工作副本后,您可以通过签出该提交从任何git提交中获取文件,如:
git checkout 1e6c98511d9154bfdc49a31fd26229953df0bd70
因此,要从项目历史记录中的每个提交中获取文件,您只需要(a)生成项目的提交列表,然后(b)迭代该列表,检查每个提交和处理文件。
git rev-list HEAD
命令将生成当前分支上所有提交的列表(从最新到最旧)。如果您想以正向顺序处理这些文件,可以将其传递给tac
以反转列表,例如。
for rev in $(git rev-list HEAD | tac); do
git checkout $rev
...do something here...
done
*运行git clone <repourl>
答案 1 :(得分:1)
假设你是git的新手,你必须从这里安装git工具:
然后你必须在git控制台运行中克隆你的存储库:
git clone https://github.com/username/repositoryname.git
完成这些步骤之后,您就可以在@larsks解释的不同提交中移动。
列出特定文件的每次提交:
答案 2 :(得分:1)
这不是最优雅的解决方案,但应该可行。
首先,您必须使用以下命令获取存储库的本地副本:
git clone <repo-url>
您从项目的GitHub页面获得<repo-url>
(选中“克隆或下载”按钮)。
然后你cd
进入本地仓库并按照以下方式运行:
for rev in $(git log --format=%H); do
git checkout $rev -- file1
cp file1 ../history/file1-$rev
done
确保提前创建history
目录。对于需要获取的每个文件,在循环内复制两行。
最后运行git reset --hard
以使存储库处于其原始状态。
如果您还需要文件的时间戳,则可以使用git log --format=%ct file1
获取该文件的时间戳。将cp
命令替换为:
ts=$(git log --format=%ct $rev file1)
cp file1 ../history/file1-$rev-$ts
使用documentation检查get log
以查找可以获得的其他文件或提交属性。