var fs = require('fs'); var child_process = require("child_process"); var files = {}; (function recurse(path = '.'){ console.log("stat", path); fs.readdirSync(path).forEach(filename => { if (filename == ".git" || filename == ".DS_Store") return; // must ignore files that git ignores by default var filepath = path + "/" + filename; var stat = fs.statSync(filepath); if (stat.isDirectory()) { recurse(filepath); } else { if (!files[stat.mtimeMs]) files[stat.mtimeMs] = []; files[stat.mtimeMs].push(filepath); } }); })(); console.log(files); var times = Object.keys(files); times.sort((a,b)=>a-b); times.forEach(time => { var dateString = new Date(Number(time)).toLocaleString(); var msg = `${dateString}\n\n${time}`; var filearr = files[time].map(x => x.replace(/"/g, '\\"').replace(/\\/g, "\\\\")); console.log(String(child_process.execSync(`git commit --date="${new Date(Number(time)).toISOString()}" -m "${msg}" "${filearr.join('" "')}"`))); });