отслеживание изменений в crontab с помощью git

Вот PHP-скрипт:

<?php
$s_cue = $argv[1];
$a_cue = file($s_cue);
$n_row = -1;
foreach ($a_cue as $s_row) {
   $s_trim = trim($s_row);
   $a_row = str_getcsv($s_trim, ' ');
   if (preg_match('/^FILE\s/', $s_row) == 1) {
      $s_file = $a_row[1];
   }
   if (preg_match('/^\s+TRACK\s/', $s_row) == 1) {
      $n_row++;
      $a_table[$n_row]['track'] = $a_row[1];
   }
   if (preg_match('/^\s+TITLE\s/', $s_row) == 1) {
      $a_table[$n_row]['title'] = $a_row[1];
   }
   if (preg_match('/^\s+PERFORMER\s/', $s_row) == 1) {
      $a_table[$n_row]['artist'] = $a_row[1];
   }
   if (preg_match('/^\s+INDEX\s/', $s_row) == 1) {
      $s_dur = $a_row[2];
      $a_frame = sscanf($s_dur, '%d:%d:%d', $n_min, $n_sec, $n_fra);
      $n_index = $n_min * 60 + $n_sec + $n_fra / 75;
      $a_table[$n_row]['ss'] = $n_index;
      if ($n_row > 0) {
         $a_table[$n_row - 1]['to'] = $n_index;
      }
   }
}
$a_table[$n_row]['to'] = 10 * 60 * 60;
foreach ($a_table as $m_row) {
   $a_cmd = [
      'ffmpeg',
      '-i', $s_file,
      '-ss', $m_row['ss'],
      '-to', $m_row['to'],
      '-metadata', 'artist='. $m_row['artist'],
      '-metadata', 'title='. $m_row['title'],
      '-metadata', 'track='. $m_row['track'],
      $m_row['track']. ' '. $m_row['title']. '.m4a'
   ];
   $a_esc = array_map('escapeshellarg', $a_cmd);
   $s_esc = implode(' ', $a_esc);
   system($s_esc);
}
7
15.08.2019, 15:43
2 ответа

Вы можете использовать фильтр:

git config filter.dropSecondLine.clean "sed '2d'"

Отредактируйте/создайте.git/info/attributes и добавьте:

* filter=dropSecondLine

Если вы не хотите, чтобы фильтр действовал на все файлы в репозитории, измените *, чтобы он соответствовал соответствующему шаблону или имени файла.

В результате рабочий каталог останется прежним, но у больших двоичных объектов репо не будет второй строки в файлах. Поэтому, если вы потянете его в другом месте, вторая строка не появится (результат sed 'd2' ). И если вы измените вторую строку вашего файла журнала, вы сможете добавить ее, но не зафиксировать, так как изменение большого двоичного объекта происходит при добавлении, и в этот момент это будет тот же файл, что и в репо.

5
27.01.2020, 20:16

Вы можете использоватьgit blame(«Показать, какая ревизия и автор в последний раз изменили каждую строку файла -Аннотирует каждую строку в данном файле информацией из ревизии, которая последней изменила строку. ревизия». )См. также это .

В частности, при использовании опции -L:

-L <start>,<end>
<start> and <end> are optional. “-L <start>” or “-L <start>,” spans from <start> to end of file. “-L,<end>” spans from start of file to <end>.

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

В остальном, для настройки, кажется, git filter может это сделать. Смотрите ссылки ниже и другой ответ здесь.

https://stackoverflow.com/questions/6557467/can-git-ignore-a-specific-line

https://stackoverflow.com/questions/16244969/how-to-tell-git-to-ignore-individual-lines-i-e-gitignore-for-specific-lines-of

0
27.01.2020, 20:16

Теги

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