#git #github
Вопрос:
Мой товарищ по команде создал репо для школьного проекта как частное, пока мы работали над ним. Это считалось нашим портфолио-проектом для курса, поэтому нам разрешили поделиться им после окончания курса, но мой товарищ по команде никогда не менял видимость. Я хотел бы сделать его видимым в своем профиле на GitHub, чтобы потенциальные работодатели могли видеть его, когда я подаю заявление о приеме на работу.
Я попытался разветвить его, но вилка также является частной, и я не могу ее изменить. Поэтому я создал новое публичное репо, просто клонировал частное и перенес его в свое новое публичное репо. В какой — то степени это работает-код есть и содержит историю всех коммитов, но в нем не отображаются ветви, запросы на извлечение и т. Д., Которые я в идеале хотел бы сохранить, чтобы вы могли видеть все мои вклады.
Предполагая, что у меня больше нет возможности связаться с моим товарищем по команде, чтобы попросить его опубликовать исходное репо, есть ли лучший способ справиться с этим?
Комментарии:
1. Вы можете перенести/переместить все данные git (включая ветви, теги и т.д.) В новое хранилище, Но только владелец может изменить видимость/право собственности на фактическое хранилище, а проблемы/запросы на извлечение являются не данными/хранилищем git, а частью репозитория GitHub.
Ответ №1:
Как связаться с:
- Git по умолчанию требует электронной почты
- GitHub позволяет упоминать людей с
@username
Откройте git log
и проверьте наличие электронной почты, или соберите адрес электронной почты из шаблона «Без ответа», или создайте новую проблему в личном репо и упомяните товарища по команде.
У вашего товарища по команде должно быть что-то полезное в конфигурации git (электронная почта) или в профиле GitHub, поэтому вы должны иметь возможность связаться с ним. Если нет, попробуйте поговорить с учителем/лектором. Если все еще безуспешно, давайте перейдем к технической части.
Давайте начнем с воспроизведения ситуации на машине:
- Ваш товарищ по команде создал репо, так или иначе, мы сделаем самый простой случай:
/tmp$ mkdir folder amp;amp; pushd folder
# /tmp/folder /tmp
/tmp/folder$ mkdir original-repo amp;amp; pushd original-repo
# /tmp/folder/original-repo /tmp/folder /tmp
/tmp/folder/original-repo$ git init
# Initialized empty Git repository in /tmp/folder/original-repo/.git/
- Добавлены некоторые коммиты, ветви, теги:
/tmp/folder/original-repo$ git commit -m initial --allow-empty
# [master (root-commit) 98f9b79] initial
/tmp/folder/original-repo$ git tag mytag
/tmp/folder/original-repo$ git checkout -b new-branch
# Switched to a new branch 'new-branch'
/tmp/folder/original-repo$ git commit -m new-commit --allow-empty
# [new-branch 8839b1a] new-commit
/tmp/folder/original-repo$ git checkout master
# Switched to branch 'master'
/tmp/folder/original-repo$ popd
# /tmp/folder /tmp
- Толкнул его куда-то:
# how a repo is created via GitHub, cca
/tmp/folder$ mkdir remote-original-repo amp;amp; pushd remote-original-repo
# /tmp/folder/remote-original-repo /tmp/folder /tmp
/tmp/folder/remote-original-repo$ git init --bare
# Initialized empty Git repository in /tmp/folder/remote-original-repo/
/tmp/folder/remote-original-repo$ git branch -a
# <nothing>
/tmp/folder/remote-original-repo$ pushd ../original-repo/
# /tmp/folder/original-repo /tmp/folder/remote-original-repo /tmp/folder /tmp
/tmp/folder/original-repo$ git remote add origin ../remote-original-repo
/tmp/folder/original-repo$ git push --all amp;amp; git push --tags
# Enumerating objects: 3, done.
# Counting objects: 100% (3/3), done.
# Delta compression using up to 4 threads
# Compressing objects: 100% (2/2), done.
# Writing objects: 100% (3/3), 257 bytes | 257.00 KiB/s, done.
# Total 3 (delta 1), reused 0 (delta 0)
# To ../remote-original-repo
# * [new branch] master -> master
# * [new branch] new-branch -> new-branch
# Total 0 (delta 0), reused 0 (delta 0)
# To ../remote-original-repo
# * [new tag] mytag -> mytag
/tmp/folder/original-repo$ popd
# /tmp/folder/remote-original-repo /tmp/folder /tmp
/tmp/folder/remote-original-repo$ git branch -a amp;amp; git tag -l
# * master
# new-branch
# mytag
/tmp/folder/remote-original-repo$ popd
# /tmp/folder /tmp
Такова нынешняя ситуация:
- Вы создали своего клона
/tmp/folder$ git clone remote-original-repo local-clone
# Cloning into 'local-clone'...
# done.
/tmp/folder$ pushd local-clone/
# /tmp/folder/local-clone /tmp/folder /tmp
/tmp/folder/local-clone$ git branch -a amp;amp; git tag -l
# * master
# remotes/origin/HEAD -> origin/master
# remotes/origin/master
# remotes/origin/new-branch
# mytag
(Git по умолчанию извлекает все ветви, но не помечает их для отслеживания!)
- Создал репо в удаленном месте и расширил ваши филиалы (т. Е. Только локальные).
/tmp/folder/local-clone$ popd
# /tmp/folder /tmp
/tmp/folder$ mkdir remote-cloned-repo amp;amp; pushd remote-cloned-repo
# /tmp/folder/remote-cloned-repo /tmp/folder /tmp
/tmp/folder/remote-cloned-repo$ git init --bare
# Initialized empty Git repository in /tmp/folder/remote-cloned-repo/
/tmp/folder/remote-cloned-repo$ git branch -a amp;amp; git tag -l
# <nothing>
/tmp/folder/remote-cloned-repo$ pushd ../local-clone/
# /tmp/folder/local-clone /tmp/folder/remote-cloned-repo /tmp/folder /tmp
/tmp/folder/local-clone$ git remote add my-fork ../remote-cloned-repo
/tmp/folder/local-clone$ git push --all my-fork
# Enumerating objects: 2, done.
# Counting objects: 100% (2/2), done.
# Writing objects: 100% (2/2), 179 bytes | 179.00 KiB/s, done.
# Total 2 (delta 0), reused 0 (delta 0)
# To ../remote-cloned-repo
# * [new branch] master -> master
/tmp/folder/local-clone$ popd
# /tmp/folder/remote-cloned-repo /tmp/folder /tmp
/tmp/folder/remote-cloned-repo$ git branch -a amp;amp; git tag -l
# * master
# where is the rest?
Но не все было сдвинуто с мертвой точки. С помощью git вы также получаете все ветви и теги локально, но они не передаются автоматически, поэтому вам также необходимо использовать --all
и --tags
из вашего клона:
Так как же нам отсюда двигаться?
- Отслеживайте все удаленные филиалы
origin
как локальные
/tmp/folder/remote-cloned-repo$ pushd ../local-clone/
# /tmp/folder/local-clone /tmp/folder/remote-cloned-repo /tmp/folder /tmp
/tmp/folder/local-clone$ for ref in $(git for-each-ref --format='%(refname:short)' --no-merged=origin/HEAD refs/remotes/origin);do git checkout -b $(echo "$ref"|sed -e 's,origin/,,') --track "$ref";done
# Branch 'new-branch' set up to track remote branch 'new-branch' from # 'origin'.
# Switched to a new branch 'new-branch'
- Снова переместите все в удаленное хранилище fork
/tmp/folder/local-clone$ git push --all my-fork
# Enumerating objects: 1, done.
# Counting objects: 100% (1/1), done.
# Writing objects: 100% (1/1), 202 bytes | 202.00 KiB/s, done.
# Total 1 (delta 0), reused 0 (delta 0)
# To ../remote-cloned-repo
# * [new branch] new-branch -> new-branch
/tmp/folder/local-clone$ git push --tags my-fork
# Total 0 (delta 0), reused 0 (delta 0)
# To ../remote-cloned-repo
# * [new tag] mytag -> mytag
/tmp/folder/local-clone$ popd
# /tmp/folder/remote-cloned-repo /tmp/folder /tmp
/tmp/folder/remote-cloned-repo$ git branch -a amp;amp; git tag -l
# * master
# new-branch
# mytag
- (Необязательно) Удалите свой клон / создайте новый новый клон, чтобы вам не нужно было играть с разными источниками при вытягивании/выталкивании.
Что касается данных репозитория GitHub. Простой ответ — НЕТ. Немного лучший ответ-скопировать и вставить его в новое хранилище как с запросами на извлечение, так и с проблемами, но соответствующие связи и слияния, связанные с репо, уже будут нарушены. Если вы заботитесь только о содержании, оно все еще пригодно для использования. Для масштабируемости используйте API.
Также обратите внимание (шапка из фольги), что в хранилище есть юридический аспект, такой как существующие лицензии, код, представленный вашим товарищем по команде, и т. Д., Поэтому убедитесь, что вы там охвачены или просто запросите разрешение по электронной почте и сохраните разрешение в безопасном месте.