Я сотрудничаю с частным репо, созданным кем-то другим, как мне опубликовать его в своем профиле?

#git #github

Вопрос:

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

Я попытался разветвить его, но вилка также является частной, и я не могу ее изменить. Поэтому я создал новое публичное репо, просто клонировал частное и перенес его в свое новое публичное репо. В какой — то степени это работает-код есть и содержит историю всех коммитов, но в нем не отображаются ветви, запросы на извлечение и т. Д., Которые я в идеале хотел бы сохранить, чтобы вы могли видеть все мои вклады.

Предполагая, что у меня больше нет возможности связаться с моим товарищем по команде, чтобы попросить его опубликовать исходное репо, есть ли лучший способ справиться с этим?

Комментарии:

1. Вы можете перенести/переместить все данные git (включая ветви, теги и т.д.) В новое хранилище, Но только владелец может изменить видимость/право собственности на фактическое хранилище, а проблемы/запросы на извлечение являются не данными/хранилищем git, а частью репозитория GitHub.

Ответ №1:

Как связаться с:

  • Git по умолчанию требует электронной почты
  • GitHub позволяет упоминать людей с @username

Откройте git log и проверьте наличие электронной почты, или соберите адрес электронной почты из шаблона «Без ответа», или создайте новую проблему в личном репо и упомяните товарища по команде.

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

Давайте начнем с воспроизведения ситуации на машине:

  1. Ваш товарищ по команде создал репо, так или иначе, мы сделаем самый простой случай:
 /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/
 
  1. Добавлены некоторые коммиты, ветви, теги:
 /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
 
  1. Толкнул его куда-то:
 # 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
 

Такова нынешняя ситуация:

  1. Вы создали своего клона
 /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 по умолчанию извлекает все ветви, но не помечает их для отслеживания!)

  1. Создал репо в удаленном месте и расширил ваши филиалы (т. Е. Только локальные).
 /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 из вашего клона:

Так как же нам отсюда двигаться?

  1. Отслеживайте все удаленные филиалы 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'
 
  1. Снова переместите все в удаленное хранилище 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
 
  1. (Необязательно) Удалите свой клон / создайте новый новый клон, чтобы вам не нужно было играть с разными источниками при вытягивании/выталкивании.

Что касается данных репозитория GitHub. Простой ответ — НЕТ. Немного лучший ответ-скопировать и вставить его в новое хранилище как с запросами на извлечение, так и с проблемами, но соответствующие связи и слияния, связанные с репо, уже будут нарушены. Если вы заботитесь только о содержании, оно все еще пригодно для использования. Для масштабируемости используйте API.

Также обратите внимание (шапка из фольги), что в хранилище есть юридический аспект, такой как существующие лицензии, код, представленный вашим товарищем по команде, и т. Д., Поэтому убедитесь, что вы там охвачены или просто запросите разрешение по электронной почте и сохраните разрешение в безопасном месте.