Автопродвиньте изменения в одной папке в репозитории мерзавца к GitHub?

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

5
задан uliwitness 12 February 2010 в 19:53
поделиться

2 ответа

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

Если у вас есть репо с «общедоступными» файлами и репо с «частными» файлами, вы можете добавить ловушку git к «общедоступному» репо, чтобы автоматически отправлять коммиты, и просто сохранить частное репо приватным.

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

У вас есть репозиторий. ряд вариантов решения этой ситуации:

  1. Выделите "общедоступную" папку в отдельный репозиторий, который вы отправите на github. Это немного переписывает историю "общедоступной" папки. {{ 1}} Я опишу это более подробно ниже.

  2. Создайте ветку, которая касается только "общедоступной" папки, и опубликуйте только эту ветку. Это рискованно в смысле "случайно выдвинуть, т.е. опубликовать, личные данные", {{ 1}} и совершенно невозможно или, по крайней мере, довольно сложно сделать, если у вас есть какие-либо коммиты, затрагивающие как "общедоступные", так и "частные" файлы, поэтому я бы не рекомендовал этот вариант и больше не писать об этом.

Для отделения «общедоступной» папки в ее собственном репозитории, создайте новую «общедоступную» ветвь в своей «комбинированной» ветке и используйте git filter-branch на ней, чтобы сделать новую «общедоступную». "ветка" содержит только материалы из "общедоступной" папки. В разделе «Примеры» показан только правильный пример --subdirectory-filter). Тогда у вас будет как ваша старая «комбинированная» ветка с «общедоступной» папкой и личным содержимым в ней, так и новая «общедоступная» ветка только с «общедоступной» папкой.

Имейте в виду, что, например, сообщения фиксации в новой «общедоступной» ветке все еще могут содержать «личную» информацию. Поэтому вам следует просмотреть все сообщения фиксации, просканировать их на предмет личной информации и, возможно, отредактировать эту личную информацию, например с git rebase -i .

Обновление: [Последующее нажатие только «общедоступной» ветки и ничего другого, вероятно, не приведет к передаче какой-либо другой информации, поэтому эта очистка репо, вероятно, не нужна.] Если вам нужно внесите какие-либо изменения, вы захотите удалить старые неотредактированные версии из репозитория с помощью git gc (возможно, с помощью - prune = 0 и - агрессивно варианты - но я не могу найти ответ SO с дополнительной информацией об этом).

Теперь ваша «общедоступная» ветка готова к публикации. Чтобы убедиться, что он содержит только «общедоступную» информацию, вы можете поместить его в новое пустое локальное голое репо, изучить его содержимое, чтобы убедиться, что все ссылки не имеют личной информации. После того, как вы будете удовлетворены, вы можете переместить ветку «public» в новое пустое репо на github. Тогда репозиторий на github будет содержать ТОЛЬКО «публичную» ветку, которую вы, вероятно, должны назвать «master» в репозитории github.

Ваше локальное репозиторий с «комбинированной» ветвью по-прежнему содержит как общедоступную, так и частную информацию напрямую и не имеет никакого отношения к новому «общедоступному» репозиторию github.

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

Если интеграция между вашими частными и общедоступными файлами очень тесная и зависит от версии, вы можете использовать подмодуль git , чтобы добавить конкретную версию «общедоступного» репо из github в ваше частное репо. Новая папка подмодуля, названная так же, как бывшая «общедоступная» папка, минимизирует изменения в ваших личных данных, так как в этом случае все «общедоступные» файлы будут находиться на своем старом пути. Обратите внимание, что папка подмодуля не будет обновляться автоматически, когда что-то было помещено в github.Вы можете обойти это, добавив ловушку git в вашу локальную папку подмодуля, которая обновит информацию о подмодуле в «комбинированном» репозитории.

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

8
ответ дан 14 December 2019 в 04:37
поделиться

Выглядит хорошо для меня. Вот документы .

sqlite> create table t1 (id INTEGER PRIMARY KEY, name TEXT, created DATE);
sqlite> .table
t1
sqlite> .dump
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE t1 (id INTEGER PRIMARY KEY, name TEXT, created DATE);
COMMIT;

sqlite> alter table t1 add column status varchar default 'N';
sqlite> .dump
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE t1 (id INTEGER PRIMARY KEY, name TEXT, created DATE, status varchar default 'N');
COMMIT;

sqlite> insert into t1 (name) values ("test");
sqlite> select * from t1;
1|test||N

Выгрузите схему и убедитесь , что структура таблицы существует после вызова ALTER TABLE, но до INSERT. Если это транзакция, перед вставкой обязательно зафиксируйте транзакцию .

$ sqlite3 test.db ".dump"
-121--1306710-

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

UPDATE - операция, выполняемая над рабочей копией Subversion; нет каталогов .svn, нет UPDATE. CHECKOUT - это операция создания рабочей копии.

-121--1160863-

Используйте githook для подтверждения.

0
ответ дан 14 December 2019 в 04:37
поделиться
Другие вопросы по тегам:

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