Каково различие между 'мерзавцем, добавляют'. и 'мерзавец добавляет-u'?

Я принимал это обе работы таким же образом. Оба добавляют каждый файл на индекс. Но я кажусь неправым.

  • Между чем различие git add . и git add -u?
69
задан Nick Volynkin 17 June 2015 в 09:56
поделиться

3 ответа

git add documentaiton

git add . 

add all files from the current directory

git add -u 

- только файлы обновления, отслеживаемые в данный момент.

-121--2044740-

Формат PNG-файла определяет, что документ PNG разделен на несколько блоков данных. Поэтому вы должны перейти от пути к нужному фрагменту.

Данные, которые требуется извлечь, определяются в блоке tEXt . Я написал следующий класс, чтобы вы могли извлекать куски из PNG-файлов.

class PNG_Reader
{
    private $_chunks;
    private $_fp;

    function __construct($file) {
        if (!file_exists($file)) {
            throw new Exception('File does not exist');
        }

        $this->_chunks = array ();

        // Open the file
        $this->_fp = fopen($file, 'r');

        if (!$this->_fp)
            throw new Exception('Unable to open file');

        // Read the magic bytes and verify
        $header = fread($this->_fp, 8);

        if ($header != "\x89PNG\x0d\x0a\x1a\x0a")
            throw new Exception('Is not a valid PNG image');

        // Loop through the chunks. Byte 0-3 is length, Byte 4-7 is type
        $chunkHeader = fread($this->_fp, 8);

        while ($chunkHeader) {
            // Extract length and type from binary data
            $chunk = @unpack('Nsize/a4type', $chunkHeader);

            // Store position into internal array
            if ($this->_chunks[$chunk['type']] === null)
                $this->_chunks[$chunk['type']] = array ();
            $this->_chunks[$chunk['type']][] = array (
                'offset' => ftell($this->_fp),
                'size' => $chunk['size']
            );

            // Skip to next chunk (over body and CRC)
            fseek($this->_fp, $chunk['size'] + 4, SEEK_CUR);

            // Read next chunk header
            $chunkHeader = fread($this->_fp, 8);
        }
    }

    function __destruct() { fclose($this->_fp); }

    // Returns all chunks of said type
    public function get_chunks($type) {
        if ($this->_chunks[$type] === null)
            return null;

        $chunks = array ();

        foreach ($this->_chunks[$type] as $chunk) {
            if ($chunk['size'] > 0) {
                fseek($this->_fp, $chunk['offset'], SEEK_SET);
                $chunks[] = fread($this->_fp, $chunk['size']);
            } else {
                $chunks[] = '';
            }
        }

        return $chunks;
    }
}

Вы можете использовать его как таковой для извлечения требуемого фрагмента tEXt как такового:

$file = '18201010338AM16390621000846.png';
$png = new PNG_Reader($file);

$rawTextData = $png->get_chunks('tEXt');

$metadata = array();

foreach($rawTextData as $data) {
   $sections = explode("\0", $data);

   if($sections > 1) {
       $key = array_shift($sections);
       $metadata[$key] = implode("\0", $sections);
   } else {
       $metadata[] = $data;
   }
}
-121--2948933-

Это один из git gotchas , упомянутых здесь (pre Git 2,0).

git add. добавляет только то, что там, а не то, что было удалено (если отслеживается).

git add .
git commit
git status
//hey! why didn't it commit my deletes?, Oh yeah, silly me
git add -u .
git commit --amend

git add -A позаботится о обоих шагах...


При использовании Git 2.0 значение git add -A по умолчанию равно .

git add < путь > совпадает с « git add -A < путь > » сейчас, так что « git add dir/» заметит пути, удаленные из каталога, и запишите удаление.
В старых версиях Git « git add < путь > » используется для игнорирования удалений.

Вы можете сказать « git add --ignore-removal < путь > » для добавьте только добавленные или измененные пути в < путь > , если вы действительно хотите.


Предупреждение ( git1.8.3 апреля 2013, для предстоящих git2.0 ).
Я изменил свой ответ, чтобы сказать git add -u. вместо git add -u .:

git add -u будет работать над всем деревом в Git 2,0 для согласованности с « git commit -a » и другими командами.
Поскольку не будет механизма, чтобы " git add -u " вел себя как " git add -u. , "это важно для тех, кто привык " git add -u " (без pathspec) обновлять индекс только для путей в текущем подкаталоге, чтобы начать тренировать пальцы, чтобы явно сказать " git add -u. ", когда они подразумевают это до появления Git 2.0.

Как я упоминал в « e »

72
ответ дан 24 November 2019 в 13:52
поделиться

git add documentaiton

git add . 

добавить все файлы из текущего каталога

git add -u 

обновлять только файлы, отслеживаемые в данный момент.

12
ответ дан 24 November 2019 в 13:52
поделиться

Как сказано в руководстве: git add . добавит все файлы в вашу текущую директорию, в то время как git add -u . добавит только те файлы, которые уже отслеживаются.

21
ответ дан 24 November 2019 в 13:52
поделиться
Другие вопросы по тегам:

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