Я принимал это обе работы таким же образом. Оба добавляют каждый файл на индекс. Но я кажусь неправым.
git add .
и git add -u
?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 »
git add .
добавить все файлы из текущего каталога
git add -u
обновлять только файлы, отслеживаемые в данный момент.
Как сказано в руководстве: git add .
добавит все файлы в вашу текущую директорию, в то время как git add -u .
добавит только те файлы, которые уже отслеживаются.