Целостность файлов мерзавца

Если вместо этого вы используете child_process.spawn, вы сможете вызывать его с параметрами для stdio:

spawn(cmd, [], { stdio: 'ignore' });

child_process.spawn docs

РЕДАКТИРОВАТЬ:

Если вы поклонник Promise, вот утилита, которую я написал, чтобы помочь с вещами

const quietSpawn = (cmd, args = []) => {
    const splitCmd = cmd.split(' ');

    if (splitCmd.length > 1) {
        [cmd, ...args] = splitCmd;
    }

    return new Promise((resolve, reject) => {
        const proc = spawn(cmd, args, { stdio: 'ignore' });

        proc.on('exit', resolve);
        proc.on('error', reject);
    });
};

31
задан Marc Climent 11 February 2013 в 11:05
поделиться

3 ответа

Вы можете заставить Git проверить весь репозиторий с помощью git fsck . Если хранилище Git повреждено, вы должны получить новый клон из не поврежденного хранилища.

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

37
ответ дан Cristian Ciupitu 27 November 2019 в 22:21
поделиться

Недавно мне пришлось проверять репозитории на сбойном сервере, я использовал следующую команду:

for gitdir in  $(sudo find / -name ".git" -type d -printf "%h "); do
  cd $gitdir && ( git fsck && echo "${gitdir} - "'HAPPY !' ) \
  || echo "${gitdir} - "'ERROR !';
done
6
ответ дан Reinstate Monica 27 November 2019 в 22:21
поделиться

Что имел в виду Линус, когда сказал, что Git гарантирует, что файлы не повреждены, он имел в виду тот факт, что когда вы ссылаетесь на конкретный коммит (идентифицируемый его хешем), вам гарантируется , что он всегда будет относиться к одному и тому же состоянию репозитория. Если ты и ядро ​​linux вытащишь от Линуса tree, и он ссылается на некоторую фиксацию ae6bcd1 ..., вы ничего не можете сделать (даже в вашем локальном репозитории), чтобы когда-либо совершить фиксацию ae6bcd1 ... выглядеть иначе, чем коммит, на который смотрит Линус, когда он обращается к нему .

Кроме того, поскольку объект фиксации содержит ссылки на (все) свои родительские фиксации, когда вы ссылаетесь на фиксацию, вы также гарантируете ее полную историю в DAG.

Что касается повреждения файла , своего рода самостоятельный вопрос; но без повреждения фактических объектов blob (т.е. .git / objects / ob / ject_hashname), если один из ваших файлов рабочего дерева будет поврежден, вы сможете восстановить его из предыдущего состояния фиксации или из состояния индекса / кеширования.

В этом случае вы никогда не сможете повредить пульт, если не выполняете принудительные нажатия (которые перезаписывают историю на пультах),

9
ответ дан 27 November 2019 в 22:21
поделиться
Другие вопросы по тегам:

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