2013-11-26 5 views
1

Мне интересно, есть ли способ получить объекты commit и tree только с удаленного.Git blobless repository

Это может показаться глупым вопросом, я не уверен, что я новый, чтобы скрыть водопровод. Я создаю приложение, которое связывает метаданные с git-коммитами, авторством и структурой файловой системы. Мои параметры состоят в том, чтобы создать стандартную нормализацию данных в базе данных с помощью какого-то механизма синхронизации с помощью крючка или использовать мощные собственные средства git для синхронизации, добавления метаданных и истории запросов.

Однако, поскольку на самом деле я не нуждаюсь в объектах blob, это спасло бы меня от двух или двух хостов, если бы я мог их как-то пролить. Возможно ли это или любое воплощение концепции?

+0

Возможный дубликат [Генерация статистики из репозитория Git] (http://stackoverflow.com/questions/1828874/generating-statistics-from-git-repository) –

+0

Есть определенные опции git-statistics; инструменты, которые я мог бы использовать. Мне также нужно обрабатывать мои собственные данные, а «git-notes» - это один из подходов, который я сейчас изучаю. Сценарий в стороне, это очень явный вопрос, не связанный с статистикой git или другими вопросами, которые мне удалось найти: Можете ли вы получить только определенные типы объектов git (например, commit и tree) с удаленного? –

+0

Пример альтернативного воплощения этой концепции может включать в себя подрыв «git-fast-import» только для захвата определенных типов объектов с удаленного. Я не уверен, что это позволит вам сделать это, не получая капли, но это хорошо показывает, что я хочу знать: высокоуровневые, у вас есть объекты фиксации и дерева без капли, и низкоуровневые, что git plumbing команда позволила бы мне это сделать? –

ответ

1

Технически, объект фиксации только имена объект дерева, а затем объект дерева (однажды найденный) называет больше деревьев и капель. Таким образом, git-репозиторий, в котором все файлы объектов blob были намеренно «сломаны» (например, перезаписаны пустым файлом или даже полностью удалены), будет работать в некоторой степени - фактически, в той же степени, что и при создании такая вещь вручную:

$ chmod +w .git/objects/f7/0d6b139823ab30278db23bb547c61e0d4444fb 
$ : > .git/objects/f7/0d6b139823ab30278db23bb547c61e0d4444fb 
$ git status 
# On branch master 
nothing to commit, working directory clean 
$ git cat-file -p HEAD:file 
error: object file .git/objects/f7/0d6b139823ab30278db23bb547c61e0d4444fb is empty 
fatal: Not a valid object name HEAD:file 
$ git fsck 
Checking object directories: 100% (256/256), done. 
error: object file .git/objects/f7/0d6b139823ab30278db23bb547c61e0d4444fb is empty 
error: sha1 mismatch f70d6b139823ab30278db23bb547c61e0d4444fb 
error: f70d6b139823ab30278db23bb547c61e0d4444fb: object corrupt or missing 
missing blob f70d6b139823ab30278db23bb547c61e0d4444fb 

Очевидно, что это сортировка. (На самом деле, git cat-file -p HEAD и git cat-file -p HEAD: также работать здесь, как это делает git ls-tree -r HEAD.)

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

+0

Я подозреваю, что ** никакие ** blobs могут оказаться проблематичными (только что закончил просмотр объекта 'git-pack-objects'). [Этот пост] (http://samsonasik.wordpress.com/2012/11/05/practical-git-1-manage-repository-that-metadata-only/) отмечает, что наличие базы данных '.git' * только * позволяет использовать полезные запросы. Если бы я мог получить это * только *, это бы сэкономило немного места, но, как вы заметили, дерево может быть более тяжелым, чем сам проект. –

+0

Любое репозиционирование '--bare' пропускает рабочее дерево. Вы можете клонировать дерево работы для нового репозитория '--bare'; фактически, на предыдущем рабочем месте, которое было первым шагом в нашем стандартном процессе настройки. – torek

+0

Вот что я делаю с этим доказательством концепции. Я все больше нахожусь на заборе с этим подходом - я не хочу создавать базу данных SQL со сложными правилами синхронизации только для того, чтобы прикрепить мои метаданные, когда git имеет изящную, удобную для синхронизации файловую базу данных, чтобы сделать это, и я хотите получить полный доступ к истории репо. Но я не могу не чувствовать, что это может повредить моей масштабируемости по мере роста проекта. Мне бы хотелось услышать ваши мысли по этому вопросу, но вы определенно ответили на мой вопрос здесь: нет, не без развращения объектной БД и невозможности будущих выходов. –

 Смежные вопросы

  • Нет связанных вопросов^_^