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
если возможно.