GIT: изменение файлов и фиксация с одинаковой датой / временем

Кажется, что не так просто зафиксировать файл с другим содержимым, но с той же датой / временем.

В следующей ситуации:

  • Создать репозиторий git
  • Добавить файл "foo.bar" с определенной датой / временем создания / последней записи (например, 2015-01-01 00:00:00)
  • Зафиксировать этот файл
  • Измените содержимое "foo.bar" и снова установите для даты / времени то же значение
  • вызвать "git status" => нечего коммитить, рабочий каталог чистый
  • call "git commit" => Без изменений; нечего совершать

Как я могу заставить совершить коммит!?

Вот код повторного воспроизведения с libGit2Sharp:

using System.IO;
using LibGit2Sharp;
using System;
namespace GitWorkingUpdateProblem01
{
  class Program
  {
    static void Main(string[] args)
    {
      const string repoDir = @".\git-Test";
      Repository.Init(repoDir);
      using (var repo = new Repository(repoDir))
      {
        string fileName = Path.Combine(repo.Info.WorkingDirectory, "foo.bar");
        var dt = new DateTime(2015, 01, 01, 00, 00, 00);
        using (var sw = new StreamWriter(fileName, false))
        {
          sw.WriteLine("UNIQUE-TEXT-1234");
        }
        File.SetLastWriteTime(fileName, dt); File.SetCreationTime(fileName, dt);

        repo.Stage(fileName); repo.Commit("1");

        using (var sw = new StreamWriter(fileName, false))
        {
          sw.WriteLine("UNIQUE-TEXT-4321");
        }
        File.SetLastWriteTime(fileName, dt); File.SetCreationTime(fileName, dt);

        repo.Stage(fileName); repo.Commit("2"); // ==> THROWS: No changes; nothing to commit.
      }
    }
  }
}

1 ответ

Решение

Я мог бы воспроизвести его даже без libgit2sharp (используя TortoiseGit и msysgit).

Это известная проблема:
https://github.com/msysgit/git/issues/312
https://groups.google.com/forum/

Я смог заставить его обнаруживать изменения, запустив:git read-tree HEAD в консоли. Если ваша библиотека позволяет вам запускать эту (или произвольную) команду - это тоже может помочь.

В любом случае, это то, что намеренно борется с мерзавцем, поэтому я бы посоветовал не менять вручную ModifiedDate если возможно.

Другие вопросы по тегам