Не мог понять ответвление Мерзавца, слияние и переоснову

Большая часть размера связана с использованием довольно обширных библиотек времени выполнения. Так что в реальной жизни вы на самом деле связываете очень большой кусок «мертвого кода», если у вас есть такое простое приложение.

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

Есть два способа подделки меньшего приложения:

  1. Использовать динамическое связывание. Тогда ваше приложение ссылается на динамически загружаемую библиотеку. Вам по-прежнему нужен полный размер (на самом деле больше), но у вас гораздо меньший исполняемый файл.
  2. Используйте исполняемую систему сжатия .

9
задан Community 23 May 2017 в 11:58
поделиться

4 ответа

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

  • В отличие от SVN, ветки и каталоги в Git совершенно не связаны: наличие 3 веток (по одной для каждого члена команды) не означает 3 каталоги. Это не то, что вы имели в виду в своем вопросе (так как ваши каталоги на самом деле являются 3 корнями для 3 репозиториев Git), но я предпочитаю упоминать это явно на всякий случай;)

  • Git является DVCS, 3 репозитория могут быть где угодно (не в 3 каталога на одном компьютере). Если они доступны через UNC-путь ( \\ desktop \ path \ to \ repo ), они могут быть обозначены как удаленные.

  • Git clone позволяет получать ссылки для удаленных ветвей, но не создает отслеживающих локальных ветвей, позволяющих вам получить работу ваших коллег. Рубиновый модуль " В этом случае лучше всего иметь 2 ветки:

    • рабочая ветвь , которую вы используете для своей разработки, и перебазирование (для интеграции работы ваших коллег, хотя даже эта операция может выполняться сама по себе ветка)
    • общедоступная ветка , в которой вы объединяете только свою стабильную работу, и которая затем может использоваться другими удаленными репозиториями в качестве источника для слияний.
10
ответ дан 4 December 2019 в 08:52
поделиться

Тот факт, что они не внутри того же git , как вы утверждаете, никоим образом вас не ограничивает. Git распространяется, что означает, что вы можете выполнять выборку между этими репозиториями, объединять, перемещать и т. Д.

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

5
ответ дан 4 December 2019 в 08:52
поделиться

По правде говоря, я начал работать над тем, чтобы напечатать красивый, длинный, подробный ответ ... но я уже объяснил это намного лучше, чем я мог бы на http: // excursion .org / article / 2008/07 / ogre-git-tutorial / . Он описывает использование различных ветвей, пультов дистанционного управления и слияния. Это также делается в виде скринкаста, так что потратьте час, возьмите кофе и наслаждайтесь лекцией.

Конкретно для вашего вопроса: вам не следует использовать настройку каталога. Git не обрабатывает ветвление с каталогами так же, как SVN с папками веток. Ветви в git - совсем другое дело. Хотя вы не можете настраивать центральный репозиторий (я рекомендую его), вам следует настроить единственную главную ветку, в которой все будут выполнять свою окончательную чистую работу.

Один из примеров моего репозитория имеет скриншот на Wikimedia Commons . В моем примере «бармен» отправляет свой код только в кусках tar, поэтому мне приходится импортировать его сам, чтобы управлять им. "master" (показанный здесь только как remotes / elf / master) - это общедоступный репозиторий svn, из которого я импортирую и базирую изменения. « автократия » - это моя собственная база для кода, а « частный » - это место, где я храню файл конфигурации с паролями, которыми я хочу управлять, но никогда не публикую. Проверьте временные метки в приватном режиме, и вы заметите, что они не совпадают с ветками ниже. Это потому, что я переставляю эту ветвь на «автократию» вместо слияния .

Вы заметите две удаленные ссылки: эльф и бард . Это две мои удаленные машины, на которых размещено программное обеспечение. Я могу подталкивать и тянуть туда свои ветки, как хочу. В вашем случае у вас будут удаленные репозитории других разработчиков, и они будут изменять свои собственные ветки. Просмотр учебника даст вам лучшее представление о том, как это работает. Удачи :)

4
ответ дан 4 December 2019 в 08:52
поделиться

Примеры кода

Чтобы отслеживать удаленную ветку

git remote add -t master Hnr git://github.com/userName/files.git

Это не загружает вам ветку. Он просто редактирует файл .git / config и добавляет несколько строк, которые сообщают Git, как, где и как получать данные удаленно.

Чтобы получить ветку teamMate, запустите

git fetch Hnr

Чтобы убедиться, что у вас действительно есть ветка teamMates, запустите

git branch -a

или просто посмотрите ветки ваших друзей

git branch -r

Вышеупомянутые две команды сначала вызвали у меня замешательство, так как я их не знал. Это заставило меня попробовать другие ненужные команды, чтобы получить для меня ветки.

Второй способ получить ветку вашего друга

Однако обратите внимание, что вы можете использовать git-clone, чтобы поместить код вашего друга в отдельный каталог, как показано ниже

git clone UrlAtGithub

Затем вы, очевидно, можете использовать Git-remote, как указано выше, чтобы иметь ветка в вашем репозитории Git:

git remote add master Hnr PATH/ToYourFriendRepo.git

Заключение: Вы можете использовать два способа получить свой teamMate ' s для вас, либо с помощью git-clone, либо без него. Оба способа требуют использования git remote add . Преимущество последнего, похоже, в том, что вам нужно выполнять на одну команду меньше. Первый вариант снова предоставляет вам все репозитории ваших товарищей по команде на ваш жесткий диск.

Пожалуйста, см. Руководства Git, чтобы узнать, как вы можете обновить свои удаленные ветки. (NB удаленная ветка может быть на вашем компьютере. Она не обязательно должна быть на удаленном компьютере. Ваша ветка также может быть удаленной ветвью, но это ограничивает ваш рабочий процесс.)


Затем вы можете захотеть объединить свои файл друга в вашу ветку. репозиторий целиком на ваш жесткий диск.

Пожалуйста, посмотрите руководства Git, чтобы узнать, как вы можете обновить свои удаленные ветки. (NB удаленная ветка может быть на вашем компьютере. Она не обязательно должна быть на удаленном компьютере. Ваша ветка также может быть удаленной ветвью, но это ограничивает ваш рабочий процесс.)


Затем вы можете захотеть объединить свои файл друга в вашу ветку. репозиторий целиком на ваш жесткий диск.

Пожалуйста, посмотрите руководства Git, чтобы узнать, как вы можете обновить свои удаленные ветки. (NB удаленная ветка может быть на вашем компьютере. Она не обязательно должна быть на удаленном компьютере. Ваша ветка также может быть удаленной ветвью, но это ограничивает ваш рабочий процесс.)


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

[Я не знаю, как вы можете сделать следующее:] Вам нужно запустить, например,

git merge 76a32

Вы можете получить следующий результат

CONFLICT (add/add): Merge conflict in shells/externalPrograms
Auto-merging shells/smallApps/extract
CONFLICT (add/add): Merge conflict in shells/smallApps/extract
Auto-merging shells/smallApps/extract~
CONFLICT (add/add): Merge conflict in shells/smallApps/extract~
Automatic merge failed; fix conflicts and then commit the result.

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

git rebase

, и вы получите

shells/smallApps/extract: needs merge
shells/smallApps/extract~: needs merge
cannot rebase: you have unstaged changes

Exercise 1: Однако теперь я застрял, так как мой tig не показывает фиксацию моего друга в моем дереве Git. Как вы можете получить фиксацию 76a32 вашего друга в вашем дереве Git , какая ветвь находится в вашем Git?


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

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

Следующая проблема - очистить проблемные части и снова объединить. В проблемных файлах вы видите нечто подобное следующему - получайте удовольствие! (Наконец-то я пришел к реальным проблемам;)

alt text http://dl.getdropbox.com/u/175564/exampleGitProblemSolving.png


Проблема с различием и объединением dotFiles в FileMerge Mac

Мне нужно обновить мой Git, поскольку только в новейшем Git есть команда difftool. Вы можете найти решение в ветке .

Difftool позволяет запускать dotFiles в FileMerge из терминала. Вы не можете получить к ним доступ в графическом интерфейсе. Это работает как

git difftool master:README dev:README

Проблема с вашей учетной записью в Github после добавления новой удаленной учетной записи

Ваша учетная запись Github могла быть удалена в .git / config. В таком случае, Однако ни одна из команд не сработала.

Упражнение 2 : Как вы можете выполнить фиксацию для своей учетной записи github, если у вас есть teamMate в вашем удаленном списке?

Origin - это сокращенное имя для вашего фактического внешний git-repo, например, на Github. Возможно, содержимое вашей переменной origin было заменено другим удаленным репо. В этом случае я рекомендую вам создать новую переменную с помощью

git remote add github git@github.com:myLogin/myProject.git

. Обратите внимание, что вместо github у вас может быть origin2. Origin - это просто соглашение об именах репо.

Затем вы можете просто запустить

git push github master

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

5
ответ дан 4 December 2019 в 08:52
поделиться
Другие вопросы по тегам:

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