2015-01-30 3 views
5

Я хотел бы создать конкретный поток для нашей компании git.Создайте отдельный филиал в удаленном репозитории в git

  1. разработчик создает ветку на своей локальной машине и фиксирует там некоторые файлы.
  2. Dev нажать эту ветку к удаленному репо
  3. Другие разработчики не могут получить доступ к этой ветви
  4. после нескольких раундов прочь толкая Dev решили опубликовать свои изменения.
  5. Объединение частного филиала в общественном филиале
  6. нажмите эту государственную ветку.

Другими словами - можно ли настроить частную удаленную ветвь в публичном репозитории?

+0

Зачем толкнуть его, если никто не сможет его использовать ?! – Biffen

+0

Не ответ, но: Зачем вам это нужно? Существует ли какое-то официальное требование о секретности? Разве только разработчики боятся делиться своей работой? В общем, полезно иметь возможность видеть работу друг друга в процессе (помогая друг другу, подбирая кого-то, кто заболел и т. Д.). – sleske

+2

Ребята, потому что мой компьютер может сбой, потому что код не компилируется, но мне нужно как-то его сохранить, потому что мне нужна «частная» часть в репозитории для экспериментальных функций. Я встретил это в каком-то проекте. Но они используют SVN и настраивают два «потока» для повседневной разработки и публики, чтобы доставлять выполненные функции. –

ответ

7

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

  1. Дев создает местное отделение на локальной машине и совершает прочь
  2. В конце дня (или всякий раз, когда подходит) Dev толкает его частной репо git push jdoe-private my-cool-branch
  3. Dev решает, что он счастлив за работу в будут опубликованы и, возможно, объединены так можно привести в порядок его и перебазировать его безнаказанно
  4. Дев толкает его ветвь происхождения git push origin my-cool-branch

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

+0

Хорошо. Это похоже на решение. У Dev есть частное дистанционное репо - простое объединение между этим и публичным. –

0

Общим решением, которое я знаю, является согласование «пространств имен ветвей», добавив некоторую строку в имена ветвей. Например, ветви, начинающиеся с «private /», предназначены для частных экспериментов. Вы бы затем получить ветви, как

  • частный/JohnDoe/рефакторинга-taxcalculation
  • частный/JohnDoe/newGUILayout
  • частный/JaneJones/Java8
  • частный/TKirk/наращивание космического корабля

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

Если вы хотите ограничить доступ к этим ветвям на основе пользователя, вам необходимо иметь какой-либо контроль доступа на основе ветвей. В Core Git нет такой вещи, но некоторые серверы-серверы git допускают это (например, Atlassian Stash). Я не знаю ни одного сервера, который допускает такие частные ветви, но, возможно, есть тот, который позволяет это, или позволяет сценарию решения.

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

+0

gitolite имеет концепцию ограничения доступа push для некоторых пользователей к некоторым ветвям. Как и младший разработчик, он не мог нажать на мастер-ветку. Но в любом случае все ветви по-прежнему доступны для чтения –

+0

Неужели этого достаточно, чтобы название ветки дало понять, что оно личное? Если в вашей команде есть кто-то, кто вытащит такой частный филиал и будет работать с ним, ожидая, что он останется стабильным, я бы сказал, что проблема в другом месте, чем в вашем рабочем процессе git. –