zoukankan      html  css  js  c++  java
  • git分支切换时的时间戳问题

    1、为什么git仓库没有保留文件修改时的时间戳?

     摘自:https://git.wiki.kernel.org/index.php/Git_FAQ#Why_isn.27t_Git_preserving_modification_time_on_files.3F

    Why isn't Git preserving modification time on files?

    Modification time on files is a feature that affects build tools.
    Most build tools compare the timestamp of the source(s) with the timestamp of the derived file(s).

    If the source is newer, then a rebuild takes place, otherwise nothing happens. This speeds up the build process a lot.

    Now consider what would happen if you check out another branch, and modification times were preserved. We assume you already have a fully-built project.

    If a source file on that other branch has a timestamp that is older than that of the corresponding derived file, the derived file will not be built even if it is different, because the build system only compares modification times.

    At best, you'll get some kind of weird secondary error; but most likely everything will look fine at first, but you will not get the same result as you would have with a clean build. That situation is unhealthy since you really do not know what code you are executing and the source of the problem is hard to find.

    You will end up always having to make a clean build when switching branches to make sure you are using the correct source.

    (Git bisect is another Git procedure that checks out old and new revisions where you need a reliable rebuild.)
    Git sets the current time as the timestamp on every file it modifies, but only those. The other files are left untouched, which means build tools will be able to depend on modification time and rebuild properly. If build rules change, that can cause a failure anyway, but that is a far less common problem than accidentally not rebuilding.

    2、为什么git仓库仅仅保留change commit 的修改时间戳信息,而没有保留文件的时间戳信息?

    摘自:https://stackoverflow.com/questions/2179722/checking-out-old-file-with-original-create-modified-timestamps

    I believe that the only timestamps recorded in the Git database are the author and commit timestamps. I don't see an option for Git to modify the file's timestamp to match the most recent commit, and it makes sense that this wouldn't be the default behavior (because if it were, Makefiles wouldn't work correctly).

    You could write a script to set the modification date of your files to the the time of the most recent commit. It might look something like this:

    IFS="
    "
    for FILE in $(git ls-files)
    do
        TIME=$(git log --pretty=format:%cd -n 1 --date=iso -- "$FILE")
        TIME=$(date -j -f '%Y-%m-%d %H:%M:%S %z' "$TIME" +%Y%m%d%H%M.%S)
        touch -m -t "$TIME" "$FILE"
    done
     
  • 相关阅读:
    img标签为什么可以设置宽高
    高度和宽度的操作
    自增自减运算符
    读取标签内容:innerHTML和innerText的区别 text()和html()的区别
    js中的常用方法
    js中style,currentStyle和getComputedStyle的区别以及获取css操作方法(考虑兼容性和局限性)
    IE盒模型与W3C盒模型区别
    css四种定位方式及其区别
    css隐藏元素的方法何区别
    Hibernate之HQL
  • 原文地址:https://www.cnblogs.com/noxy/p/7991280.html
Copyright © 2011-2022 走看看