Контроль файлов - как знать, когда файл завершен

Я пытался делать то же самое в течение нескольких дней, я использую git 2.7.2. Subtree не сохраняет историю.

Вы можете использовать этот метод, если вы не будете использовать старый проект еще раз.

Я бы предположил, что сначала вы введете B и работаете в ветке.

Вот шаги без ветвления:

cd B

# You are going to merge A into B, so first move all of B's files into a sub dir
mkdir B

# Move all files to B, till there is nothing in the dir but .git and B
git mv  B

git add .

git commit -m "Moving content of project B in preparation for merge from A"


# Now merge A into B
git remote add -f A 

git merge A/

mkdir A

# move all the files into subdir A, excluding .git
git mv  A

git commit -m "Moved A into subdir"


# Move B's files back to root    
git mv B/* ./

rm -rf B

git commit -m "Reset B to original state"

git push

Если вы сейчас регистрируете любой из файлов в subdir A, вы получите полную историю

git log --follow A/

Это сообщение, помогите мне сделать это:

http://saintgimp.org/2013/01/22/merging-two-git-repositories-into-one-repository-without-losing-file-history /

11
задан Eric Pohl 27 August 2008 в 13:23
поделиться

9 ответов

Вы попытались добраться, запись соединяют файл? Если это пишется в, который должен перестать работать, и Вы знаете для оставления его в покое некоторое время...

1
ответ дан 3 December 2019 в 08:06
поделиться

Если Вы сознаете ситуацию на программе, которая пишет файлы в каталог, у Вас может быть программа, пишут файлы во временный каталог и затем перемещают их в наблюдаемый каталог. Перемещение должно быть атомарной операцией, таким образом, наблюдатель не должен видеть файл, пока это не находится полностью в каталоге.

Если Вы не сознаете ситуацию то, что пишет в наблюдаемый каталог, можно назначить время в наблюдателе, где файл считают завершенным, когда это осталось тем же размером в течение данного времени. Если непосредственная обработка не является беспокойством, устанавливание этого таймера к чему-то относительно большому является довольно безопасным способом знать, что или файл завершен, или это никогда не будет.

5
ответ дан 3 December 2019 в 08:06
поделиться

Событие "Changed" на FileSystemWatcher должно, не должен стрелять, пока файл не закрывается. См. мой ответ на подобный вопрос. Существует возможность, что механизм загрузки FTP закрывает файл многократно во время загрузки, поскольку новые данные входят, но я думал бы, что это немного маловероятно.

3
ответ дан 3 December 2019 в 08:06
поделиться

+1 для использования file.ext.end сигнализатора, если это возможно, где содержание file.ext.end контрольная сумма для большего файла. Это не для безопасности так, поскольку она должна удостовериться, что ничто не было искажено по пути. Если кто-то может вставить их собственный файл в большой поток, они могут заменить контрольную сумму также.

0
ответ дан 3 December 2019 в 08:06
поделиться

Если содержание файла не может быть проверено для завершения (оно имеет формат поддающийся проверке или включает контрольную сумму содержания), только отправитель может проверить, что прибыл целый файл.

Я использовал метод блокировки для отправки больших файлов через FTP в прошлом.

Файл отправляется с альтернативным расширением и переименован, после того как отправитель рад, что это - все там.

Вышеупомянутое, очевидно, объединено с процессом, который периодически убирает старые файлы с временным расширением.

Альтернатива должна создать нулевой файл длины с тем же именем, но с дополнительным .lck расширением. После того как реальный файл полностью загружается, lck файл удален. Процесс получения, очевидно, игнорирует файлы, которые имеют название файла блокировки.

Без системы как это получатель никогда не может быть уверен, что целый файл прибыл.

Проверка файлы, которые не были изменены за x минуты, подвержена всем видам проблем.

3
ответ дан 3 December 2019 в 08:06
поделиться

Вероятно, необходимо пойти с некоторыми из передачи сигналов полосы: имейте производителя "file.ext", пишут макет "file.ext.end".

1
ответ дан 3 December 2019 в 08:06
поделиться

Блокировка записи не помогает, если загрузка файла привела часть к сбою, путь через и отправитель не попытались снова послать (и повторно заблокировать) файл все же.

0
ответ дан 3 December 2019 в 08:06
поделиться

Путем я регистрируюсь в Windows, если файл был полностью загружен ftp, должен попытаться переименовать его. При переименовании сбоев файл не завершен. Не очень изящный, я признаю, но это работает.

0
ответ дан 3 December 2019 в 08:06
поделиться

Следующий метод пытается открыть файл с разрешениями на запись. Он будет блокировать выполнение до тех пор, пока файл не будет полностью записан на диск:

/// <summary>
/// Waits until a file can be opened with write permission
/// </summary>
public static void WaitReady(string fileName)
{
    while (true)
    {
        try
        {
            using (System.IO.Stream stream = System.IO.File.Open(fileName, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite))
            {
                if (stream != null)
                {
                    System.Diagnostics.Trace.WriteLine(string.Format("Output file {0} ready.", fileName));
                    break;
                }
            }
        }
        catch (FileNotFoundException ex)
        {
            System.Diagnostics.Trace.WriteLine(string.Format("Output file {0} not yet ready ({1})", fileName, ex.Message));
        }
        catch (IOException ex)
        {
            System.Diagnostics.Trace.WriteLine(string.Format("Output file {0} not yet ready ({1})", fileName, ex.Message));
        }
        catch (UnauthorizedAccessException ex)
        {
            System.Diagnostics.Trace.WriteLine(string.Format("Output file {0} not yet ready ({1})", fileName, ex.Message));
        }
        Thread.Sleep(500);
    }
}

(из моего ответа на вопрос )

2
ответ дан 3 December 2019 в 08:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: