Работаем с репозиториями в git

3 ответа

Лучший ответ

Хорошо, я разобрался:

По сути, любой файл в любой папке ниже одного уровня в / public должен игнорироваться.

3

kawnah
14 Дек 2017 в 14:04

Git вообще не хранит каталоги (или папки), он только сохраняет файлы в коммите. Когда Git отправляется для проверки коммита, если для какого-либо файла в этом коммите требуется наличие родительского каталога, Git создает этот родительский каталог в этой точке. Вот почему вам нужно зафиксировать файл или в любом случае некоторый файл, внутри каталога: чтобы у Git был какой-то извлекаемый файл, который вынуждает его создать каталог.

Теперь проблема здесь в том, что когда Git выполняет свои «трюки как можно быстрее, даже если это смущает всех» :-), он может обнаружить, что перечисляет имя каталога и что он — в частности, index в Git — не имеет файлов уже в этом каталоге, и он даже не потрудится заглянуть внутрь каталога для файлов. Вот как пропускает прямо над директивой : пока он просматривал, он нашел в качестве каталога, но в нем еще не было файлов для фиксации, а затем нашел ` X4` в и решил вообще не заглядывать внутрь .

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

Как только находится в индексе, он переходит к следующему коммиту. Как только это произойдет, на самом деле безопасно перечислить , а не в файле , потому что теперь, когда Git имеет файл в каталоге, Git вынужден сканировать каталог. Запись для будет только удалена из индекса только после явного запроса на удаление этой записи ( или ) или перехода к ( — ing) существующий коммит, в котором нет файла. После удаления записи указателя перечислять , а не , теперь небезопасно, поскольку Git может вернуться к своей уловке, заметив, что является каталогом и игнорируется , и Git ничего не заставляет Git заглядывать внутрь , поэтому он не заглядывает внутрь и не находит и, следовательно, не делает проверьте на исключение.

Конечно, есть и другие способы сделать то же самое. Я предпочитаю вообще не указывать каталог на верхнем уровне: вместо этого внутри каталога создайте файл с содержимым:

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

2

torek
13 Дек 2017 в 16:21

Чтобы исключить файлы в подкаталоге, добавьте следующее к .gitignore в вашем базовом каталоге:

Если это единственный элемент в папке, и вам нужно сохранить эту папку активной, возможно, поместите в нее пустой текстовый файл

Shakes
13 Дек 2017 в 16:08

Создание Git-репозитория

Сначала рассмотрим создание репозитория. Представим, что у вас уже есть папка для хранения файлов, но она еще не находится под контролем Git. 

Откройте «Командную строку‎» (Windows) или Терминал (Linux/macOS) и перейдите по пути данной папки.

В Linux выполните команду: ‎

cd /home/user/directory

В macOS

cd /Users/user/directory

В Windows:

cd C:/Users/user/directory

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

git init

Благодаря этой команде создается структура подкаталога со всеми необходимыми файлами. Кстати, все они расположены в подпапке с названием .git. Пока что проект не находится под контролем учета версий, поскольку в него добавлены только нужные элементы для работы Git. Для добавления файлов в репозиторий будем использовать git add. Команда git commit является заключительной:

git add

git commit -m 'initial project version'

Теперь у вас есть Git-репозиторий со всеми необходимыми составляющими и отслеживаемыми файлами.

Сохранение данных из файла во временное хранилище

 Помещение одного файла

Метод ПоместитьФайл() помещает файл из локальной файловой системы во временное хранилище. Метод может принимать адрес во временном хранилище, по которому нужно сохранить файл. Если же адрес не определен или является пустой строкой, то будет создан новый адрес и метод вернет его через специальный параметр.
Примечание. Объем данных, перемещаемых между клиентом и сервером, за один вызов метода ПоместитьФайл(), не должен превышать 4 Gb (в сериализованном виде).
Если параметр, определяющий интерактивный режим работы, равен Истина, то метод отобразит стандартное диалоговое окно выбора файла, в котором можно выбрать файл для помещения в хранилище. В этом случае метод также вернет адрес выбранного файла.
В качестве результата метод возвращает Ложь, если пользователь в интерактивном режиме отказался от совершения операции в диалоге выбора файла.

Помещение набора файлов

Метод ПоместитьФайлы() помещает во временное хранилище несколько файлов за один вызов. Существует несколько различных способов использования этого метода:
● предварительно сформировать список добавляемых файлов, например, когда предварительно выбрал файлы, которые необходимо поместить в информационную базу;
● передать в метод маску поиска файлов, например, когда требуется поместить в информационную базу все файлы определенного вида,например, все картинки;
● передать в метод предварительно подготовленный объект ДиалогВыбораФайла в режиме открытия файлов.
После окончания работы метод может вернуть список реально добавленных файлов.

// СписокФайлов – реквизит формы типа СписокЗначений,// содержащий список добавляемых файлов
МассивФайлов = Новый Массив;Для каждого ЭлементСписка Из СписокФайлов ЦиклМассивФайлов.Добавить(Новый ОписаниеПередаваемогоФайла(ЭлементСписка, ));КонецЦикла;ПомещенныеФайлы = Новый Массив;Результат = ПоместитьФайлы(МассивФайлов, ПомещенныеФайлы, , Ложь, УникальныйИдентификатор);

Примечание 1. Для использования метода ПоместитьФайлы() в веб-клиенте требуется подключение расширения работы с файлами .
Примечание 2. Объем данных, перемещаемых между клиентом и сервером, за один вызов метода ПоместитьФайлы(), не должен превышать 4 Gb (в сериализованном виде).

Помещение данных во временное хранилище

Метод ПоместитьВоВременноеХранилище() схож с методом ПоместитьФайл(), за исключением того, что данные для записи во временное хранилище
представляются не в виде пути в файловой системе, а в виде значения. Точно так же, если не указан существующий адрес во временном хранилище, создается новый адрес. Адрес возвращается как результат функции. Так же как и для файлов, размещенные данные обязательно принадлежат какой-либо форме и автоматически удаляются после ее удаления.Примечание

Объем данных, перемещаемых между клиентом и сервером, за один вызов метода ПоместитьВоВременноеХранилище(), не должен превышать 4 Gb (в сериализованном виде).Внимание! При помещении во временное хранилище фактическая сериализация значения не выполняется. Помещается ссылка на значение, которая хранится в кеше в течение 20 минут

По истечении этого периода значение сериализуется, записывается на диск (в хранилище сеансовых данных) и удаляется из кеша.

Удаление данных из временного хранилища

После того как данные сохранены в реквизите объекта информационной базы, данные во временном хранилище можно удалить. Для этого есть методУдалитьИзВременногоХранилища(), который производит удаление. Метод принимает в параметре адрес во временном хранилище.

Проверка адреса на принадлежность временному хранилищу

Адрес может указывать как на временное хранилище, так и на реквизит в информационной базе. Для проверки его типа существует методЭтоАдресВременногоХранилища().  Он проверяет, что переданный адрес является адресом, указывающим на хранилище. Возвращает Истина, если адрес указывает на временное хранилище.

Получение адреса реквизита

После того как данные помещены в реквизит объекта информационной базы, может потребоваться получить доступ к ним с помощью файловых методов.
Но прежде чем получить данные, например из реквизита, необходимо получить адрес этого реквизита. Для этого существует метод ПолучитьНавигационнуюСсылку().

Он может вернуть адрес значения в информационной базе по исходным параметрам. Для этого необходимо передать ключ объекта (это может быть
как ссылка на объект, так и ключ записи регистра сведений) и имя реквизита. Если нужно получить адрес значения, хранимого в реквизите
табличной части, то к имени реквизита в параметре, задающем имя реквизита, необходимо добавить имя табличной части и точку «.». Например: Товары.Изображение

Исправление ошибок

В новой версии программы исправлены ошибки (версии: базовая и ПРОФ):

  • Попытка загрузки данных из 1С:Бухгалтерии завершалась ошибкой загрузки ставки НДС.
  • Список «Виды документов» не открывался при первоначальном заполнении программы.
  • При открытии карточки пользователя в списке «Активные пользователи» возникала ошибка.
  • Отображалась группа команд сканирования при работе на MacOS, Linux и в веб-клиенте.
  • При первоначальном заполнении программы при вводе пароля «Интернет-поддержки» его данные не скрывались.

Список ошибок также можно посмотреть в разделе Обновление программ портала ИТС:

  • для ПРОФ,
  • для базовой.

* UNC расшифровывается как Universal (или Uniform, или Unified) Naming
Convention и является синтаксисом для доступа к директориям и файлам в компьютерных сетях. Синтаксис показан ниже:
\\<computer name>\<shared directory>\ дальше следует любое число директорий, в конце указывается имя папки или файла.
Например: \\pondermatic\public\studyarea.gdb, \\omnipotent\shared_stuff\wednesday\tools

Подробнее о шаблонах игнорирования

Шаблон Примеры соответствия Пояснение*
**/logs logs/debug.log logs/monday/foo.bar build/logs/debug.log Добавьте в начало шаблона две звездочки, чтобы сопоставлять каталоги в любом месте репозитория.
**/logs/debug.log logs/debug.log build/logs/debug.log но не logs/build/debug.log Две звездочки можно также использовать для сопоставления файлов на основе их имени и имени родительского каталога.
*.log debug.log foo.log .log logs/debug.log Одна звездочка — это подстановочный знак, который может соответствовать как нескольким символам, так и ни одному.
*.log !important.log debug.log trace.log но не important.log logs/important.log Добавление восклицательного знака в начало шаблона отменяет действие шаблона. Если файл соответствует некоему шаблону, но при этом также соответствует отменяющему шаблону, указанному после, такой файл не будет игнорироваться.
.log !important/.log trace.* debug.log important/trace.log но не important/debug.log Шаблоны, указанные после отменяющего шаблона, снова будут помечать файлы как игнорируемые, даже если ранее игнорирование этих файлов было отменено.
/debug.log debug.log но не logs/debug.log Косая черта перед именем файла соответствует файлу в корневом каталоге репозитория.
debug.log debug.log logs/debug.log По умолчанию шаблоны соответствуют файлам, находящимся в любом каталоге
debug?.log debug0.log debugg.log но не debug10.log Знак вопроса соответствует строго одному символу.
debug.log debug0.log debug1.log но не debug10.log Квадратные скобки можно также использовать для указания соответствия одному символу из заданного диапазона.
debug.log debug0.log debug1.log но не debug2.log debug01.log Квадратные скобки соответствуют одному символу из указанного набора.
debug.log debug2.log но не debug0.log debug1.log debug01.log Восклицательный знак можно использовать для указания соответствия любому символу, кроме символов из указанного набора.
debug.log debuga.log debugb.log но не debug1.log Диапазоны могут быть цифровыми или буквенными.
logs logs logs/debug.log logs/latest/foo.bar build/logs build/logs/debug.log Без косой черты в конце этот шаблон будет соответствовать и файлам, и содержимому каталогов с таким именем. В примере соответствия слева игнорируются и каталоги, и файлы с именем logs
logs/ logs/debug.log logs/latest/foo.bar build/logs/foo.bar build/logs/latest/debug.log Косая черта в конце шаблона означает каталог. Все содержимое любого каталога репозитория, соответствующего этому имени (включая все его файлы и подкаталоги), будет игнорироваться
logs/ !logs/important.log logs/debug.log logs/important.log Минуточку! Разве файл logs/important.log из примера слева не должен быть исключен нз списка игнорируемых? Нет! Из-за странностей Git, связанных с производительностью, вы не можете отменить игнорирование файла, которое задано шаблоном соответствия каталогу
logs/**/debug.log logs/debug.log logs/monday/debug.log logs/monday/pm/debug.log Две звездочки соответствуют множеству каталогов или ни одному.
logs/*day/debug.log logs/monday/debug.log logs/tuesday/debug.log but not logs/latest/debug.log Подстановочные символы можно использовать и в именах каталогов.
logs/debug.log logs/debug.log но не debug.log build/logs/debug.log Шаблоны, указывающие на файл в определенном каталоге, задаются относительно корневого каталога репозитория. (При желании можно добавить в начало косую черту, но она ни на что особо не повлияет.)

Создаём новую ветку и добавляем в проект внесённые изменения

Добавим к проекту пустой CSS-файл и подключим его к HTML. После этого в меню редактора появятся два цвета: HTML-файл подсветится оранжевым, а CSS-файл — зелёным. Оранжевый означает, что файл уже есть в удалённом репозитории и его нужно обновить. Зелёный — файла нет в репозитории. Переходим в GitHub Desktop и добавляем коммит для этого изменения.


Подсветка файлов в меню меняется после добавления или редактирования файлов — это подсказка, чтобы мы не забывали обновлять репозиторий

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

  • Переходим в GitHub Desktop.
  • Открываем раздел Current Branch, нажимаем кнопку New Branch, пишем название новой ветки и кликаем Create New Branch.
  • Возвращаемся в редактор кода и тестируем идею.

После создания новой ветки не забудьте нажать на Push origin, чтобы изменения попали в удалённый репозиторий на сайте GitHub.


Создаём новую ветку в GitHub Desktop
Тестируем изменения, добавленные в новую ветку. Основная ветка в этот момент находится в прежнем состоянии и сохраняет свой код

Предположим, наша идея с красным фоном оказалась удачной и код нужно залить в основную ветку. Чтобы это сделать, переходим сайт GitHub, нажимаем кнопку Сompare & pull request и подтверждаем изменения кнопкой Merge pull request. Последний шаг — переходим в GitHub Desktop, кликаем Fetch origin и синхронизируемся с удалённым репозиторием. Теперь код из дополнительной ветки попал в основную, а изменения есть на ПК и в облаке.

Отслеживание изменений в Git

Git отслеживает изменения файлов в репозитории по мере работы и разделяет файлы в репозитории на три категории:

  • Неизмененные файлы — эти файлы не были изменены с момента последней фиксации.
  • Измененные файлы — эти файлы имеют изменения с момента последней фиксации, но еще не были помещены на промежуточное хранение для следующей фиксации.
  • Промежуточные файлы — эти файлы содержат изменения, которые будут добавлены к следующей фиксации.

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

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

Где должен находиться этот файл

Файл может находиться в корне проекта или любом подкаталоге.

Либо можно задать глобальный файл gitignore, таким образом:

$ git config --global core.excludesfile ~/.gitignore_global

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

Примеры содержимого файла

# строки начинающиеся на # - это комментарии, они не учитываются

# Исключить все файлы с расширение .a
*.a

# Но отслеживать файл lib.a даже если он подпадает под исключение выше
!lib.a

# Исключить файл TODO в корневом каталоге, но не файл в subdir/TODO
/TODO

# Игнорировать все файлы в каталоге build/
build/

# Игнорировать файл doc/notes.txt, но не файл doc/server/arch.txt
doc/*.txt

# Игнорировать все .txt файлы в каталоге doc/
doc/**/*.txt

Добавляем новые файлы на ПК и переносим их в удалённый репозиторий

Папка с файлами нашего репозитория хранится на рабочем столе. Чтобы продолжить работу, откроем проект в редакторе кода: можно выбрать любую программу, и GitHub Desktop предлагает воспользоваться Atom.

Выбор редактора кода — дело вкуса. Мы будем работать с репозиторием в Visual Studio Code — это бесплатный редактор от компании Microsoft.

Папка с нашим тестовым репозиторием в Visual Studio Code

Создадим HTML-файл, добавим базовую структуру и посмотрим на боковое меню — HTML-файл подсвечен зелёным цветом. Это означает, что в проекте появились изменения и они ещё не добавлены в репозиторий на GitHub.

Редактор кода подсвечивает зелёным цветом новые файлы

Переходим в GitHub Desktop — созданный HTML-файл появится во вкладке Changes. Для его сохранения пишем коммит и переходим во вкладку History для просмотра изменений. Если изменения сохранились, нажимаем на Push origin и отправляем изменения в удалённый репозиторий.

.gitignore Шаблоны

— это простой текстовый файл, в каждой строке которого содержится шаблон, который файлы или каталоги следует игнорировать.

Комментарии

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

Слэш

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

Если шаблон начинается с косой черты, он соответствует файлам и каталогам только в корне репозитория.

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

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

Самый простой шаблон — это буквальное имя файла без каких-либо специальных символов.

Шаблон Примеры совпадений

Подстановочные символы

— символ звездочки соответствует нулю или более символам.

Шаблон Примеры совпадений

— Два соседних символа звездочки соответствуют любому файлу или нулю или более каталогам. Если за ним следует косая черта ( ), он соответствует только каталогам.

Шаблон Примеры совпадений
Соответствует чему-либо в каталоге .

— Знак вопроса соответствует любому одиночному символу.

Шаблон Примеры совпадений

Квадратных скобок

— соответствует любому из символов, заключенных в квадратные скобки. Когда два символа разделены дефисом это обозначает диапазон символов. Диапазон включает все символы, которые находятся между этими двумя символами. Диапазоны могут быть буквенными или числовыми.

Если первый символ после — восклицательный знак ( ), То шаблон соответствует любому символу, кроме символов из указанного набора.

Шаблон Примеры совпадений

Отрицательные паттерны

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

Шаблон Примеры совпадений
или не будут проигнорированы

Для чего нужен .gitignore

Файл .gitignore используется для того, чтобы определить, какие файлы и папки не нужно добавлять в git репозиторий.

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

git add path/to/file

Однако это было бы очень трудоемко. Гораздо проще использовать команду:

git add .

Которая добавит все файлы в каталоге проекта.

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

Тут нам и нужен .gitignore. Вам нужно его самим создать и разместить в корне проекта либо нужной подпапке.

Создание репозитория Git для существующего проекта

Мы также можем отслеживать существующий проект с помощью Git. В этом случае мы инициализируем репозиторий Git в существующем каталоге проекта. Это так же, как создание репозитория git для нового проекта с той лишь разницей, что Шаг 1 не требуется.

1. Перейдите к существующему проекту

Перейдите в каталог, содержащий данные проекта. В этом случае будем считать, что имя проекта-SampleProject в локации C:\Users\admin1\LocalGit\SampleProject, переместитесь в аналогичное место в вашей системе. Содержимое каталога можно просмотреть с помощью команды dir.

Примечание: создайте несколько файлов в SampleProject для демонстрационной цели.

2. Инициализация репозитория Git для проекта

Инициализируйте репозиторий git в этом проекте с помощью той же команды, которая использовалась при создании голого репозитория, т. е. git init.

Просмотрите содержимое каталога и обратите внимание, что в нем была создана папка .git

После инициализации Git проект отслеживается GIT.

Начальная настройка

Параметры настройки и сценарии применения в официальном репозитории компании 1С на GitHub https://github.com/1C-Company/GitConverter/wiki

Настройка базы ГитКонвертера

  1. Разместите базу ГитКонвертера на сервере «1С:Предприятия». Работа в файловом режиме может быть использована только в демонстрационных целях.
  2. Заполните константу «Путь к версиям платформы на сервере», где располагаются файлы Конфигуратора 1cv8(.exe) в формате: C:\Program files (x86)\1cv8\%ВерсияПлатформы%\bin , где в параметр %ВерсияПлатформы% — будет подставлена текущая версия хранилища из настроек.
  3. Для ограничения производительности можно включить константу «Использовать очереди выполнения» — количеством очередей можно балансировать нагрузку на сервер.

Настройка сервера «1С:Предприятия»

Для информационной базы ГитКонвертера на сервере «1С:Предприятия» рекомендуется настроить удаление, перенос в архив или полностью отключить журнал регистрации, т.к. интенсивность событий в информационной базе может быть очень высокой, а ценность истории журнала регистрации за прошлые периоды — низкая.

Для легкого удаления и архивирования журнала регистрации можно переключить его формат на старый режим. Для этого необходимо в каталог журнала регистрации информационной базы скопировать пустой файл с именем: 1Cv8.lgf.Для больших проектов рекомендуется  выполнить такую настройку (удаление/резервное копирование файлов журнала регистрации).

Также рекомендуется переключить регистрацию событий — только ошибки. Для этого следует выбрать команду в Конфигураторе  Администрирование — Настройка журнала регистрации… = Регистрировать ошибки и в открывшемся диалоге установить минимально необходимую вам периодичность.

Основные возможности

  • Конвертирование существующего хранилища конфигурации «1С:Предприятия» в репозиторий Git в формате 1C:EDT.
  • Обновлять изменения из хранилища «1С:Предприятия» в репозиторий Git.
  • Параллелизировать загрузку истории хранилища из копий хранилища.
  • Ограничение нагрузки на сервер с помощью очередей.
  • Возможно «сращивать» историю в Git, если хранилище конфигураций «1С:Предприятия» обрезалось или начиналось заново.
  • Создание корректной истории переименования объектов метаданных (см. ).

Выгружать только изменения конфигурации. 
Доступно для Платформы 8.3.10 и выше, для версий ниже 8.3.15 требуется использовать «очереди».

  • Создание сквозной история изменений для «хранилищ исправительных версий» если вы используете Технологию разветвленной. разработки конфигураций (https://its.1c.ru/db/v8std#content:709:hdoc) или аналогичный процесс — хранилище версии можно загружать в «ветку» Git, получив сквозную историю в ветке.
  • Возможность автоматически указывать Git теги при изменении версии конфигурации.
  • Поддержка конвертации разных хранилищ в разные ветки одного репозитория на различных версия Платформы и различных версиях 1C:EDT.
  • Поддержка конвертации хранилищ расширений конфигураций. Возможность связи с базовым проектом 1С:ГитКонвертера или независимо.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Все про сервера
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: