聪明的风衣 · idea恢复本地未提交到git代码_idea ...· 2 周前 · |
曾经爱过的吐司 · 衡阳市人民政府门户网站-注销手机号等于出卖自 ...· 3 月前 · |
单身的麦片 · 爱奇艺-在线视频网站-海量正版高清视频在线观看· 5 月前 · |
开朗的牛排 · 南沙区法律服务机构、人员信息名录-广州市南沙 ...· 5 月前 · |
绅士的书包 · DKunther下载 ...· 1 年前 · |
当我使用"
git clone ...
“命令克隆一个Git仓库时,我本地仓库中的所有克隆文件都具有与发出
git clone
命令时相同的修改时间和日期和时间。
有没有一种方法可以用每个文件的实际修改时间克隆远程Git存储库
Git,因为它是分布式 does not record timestamp for the files (这意味着你计算机上的时间可以与我的不同:没有时间和日期的“中心”概念)
不记录元数据的官方论据解释为 in this answer 。
但是您可以找到尝试恢复有意义的日期、 like this one (或 simpler version of the same idea )的脚本。
我发现 user11882487's answer 的一个更短的变体更容易理解:
git ls-files | xargs -I{} git log -1 --date=format:%Y%m%d%H%M.%S --format='touch -t %ad "{}"' "{}" | $SHELL
重置mtime的另一个选项是 git-restore-mtime 。
sudo apt install git-restore-mtime # Debian/Ubuntu example
git clone <myurl>
cd <mydir>
git restore-mtime
对每个文件运行一次
log -1
让我很不爽,所以我写了这段代码来一次性完成所有这些操作:
( # don't alter any modified-file stamps:
git diff --name-status --no-find-copies --no-renames | awk '$1="D"' FS=$'\t' OFS=$'\t'
git log --pretty=%cI --first-parent --name-status -m --no-find-copies --no-renames
) | awk ' NF==1 { date=$1 }
NF<2 || seen[$2]++ { next }
$1!="D" { print "touch -d",date,$2 }' FS=$'\t'
它可以在十秒内完成linux的历史记录(通过一个shell传输所有触摸命令需要一分钟)。
这是一个毁掉一分为二的好方法,我属于~甚至不要开始尝试重载文件系统时间戳的阵营,坚持这样做的人显然必须以艰难的方式学习~,但我可以看到,也许有一些工作流程,这真的不会伤害你。
管他呢。但是,可以肯定的是,不要盲目地这样做。
由于
os.utime
接受
git log
命令输出的Unix时间戳,因此在Python语言中执行此操作比其他一些选项更简单。本例使用GitPython,但它也可以与
subprocess.run
一起调用
git log
。
import git
from os import utime
from pathlib import Path
repo_path = "my_repo"
repo = git.Repo(repo_path)
for n in repo.tree().list_traverse():
filepath = Path(repo.working_dir) / n.path
unixtime = repo.git.log(
"-1", "--format='%at'", "--", n.path
单身的麦片 · 爱奇艺-在线视频网站-海量正版高清视频在线观看 5 月前 |