Как перенести существующее git-репо с локального сервера в gitlab-репо, используя CLI (сценарий оболочки)? - PullRequest
0 голосов
/ 13 ноября 2018

У меня много репозиториев git на мой сервер . Используя командную строку (скрипт), я хочу создать новые репозитории gitlab https://gitlab.companyname.com, из существующих локальных репо. А также отправлять все ветки с тегами на сервер gitLab.

Можно ли это сделать без корпоративного аккаунта?

Ответы [ 3 ]

0 голосов
/ 13 ноября 2018

Мой frined создал скрипт (curl, git, jq требуется) только для этого. Мы используем его, и он прекрасно работает: https://gist.github.com/JonasGroeger/1b5155e461036b557d0fb4b3307e1e75

Чтобы узнать ваше пространство имен, лучше всего быстро проверить API:

curl "https://example.com/api/v3/projects?private_token=$GITLAB_PRIVATE_TOKEN"

Там используйте «namespace.name» в качестве NAMESPACE для вашей группы.

Сценарий по сути делает:

Получить все проекты, которые соответствуют вашему PROJECT_SEARCH_PARAM Получить их путь и ssh_url_to_repo

  1. Если путь к каталогу существует, перейдите в него и вызовите git pull

  2. Если путь к каталогу не существует, вызовите git clone

0 голосов
/ 26 ноября 2018

Сохранить файл под именем filename.sh - открыть терминал - перейти к сохраненному файлу каталога - введите команду "sh filename.sh" и нажмите enter

Здесь все проекты с локального сервера перемещаются на ваш сервер GitLab с помощьюиспользуя этот сценарий оболочки.

# Below is project directory where we are clone all projects
cd /Users/abcd.pqrs/Documents/dev/AllProjects

#Private Tocken
declare projectTocken="YourProjectTockenString"
declare namespaceId=111 #(Your NameSpceId from GitLab)

# Source Repo Array
declare -a source_urls=(
"git@source_Server_IP:/home/git/project_code/projects/project1.git"
"git@source_Server_IP:/home/git/project_code/projects/project2.git"
"git@source_Server_IP:/home/git/project_code/projects/project3.git"
)

# Project Names by using *Source Repo* URL Array
declare -a project_names=(
"project1"
"project2"
"project3"
)

# *Destination Repo* URLs
declare -a target_urls=(
"http://destination_Server_IP/groupName/project1.git"
"http://destination_Server_IP/groupName/project1.git"
"http://destination_Server_IP/groupName/project1.git"
)

## now loop through the above Source URL array
for i in "${!source_urls[@]}"
do
# Clone the project into local directory
echo "Clonning  ${source_urls[$i]}"
git clone "${source_urls[$i]}"

# Go to project folder/directory
cd "${project_names[$i]}"

# Create New Project on Gitlab
curl -H "Content-Type:application/json" http://destination_Server_IP/api/v4/projects?private_token="$projectTocken" -d "{ \"name\": \"${project_names[$i]}\", \"namespace_id\": \"$namespaceId\" }"

# Set the new server URL for this new directory
git remote set-url origin "${target_urls[$i]}"

for remote in `git branch -r | grep -v /HEAD`; do
echo "Switching to $remote Branch"
#Track all the remote branches into local repo
git checkout --track $remote ;
git status
done
#Push All branches to new server
git push origin --all

# Move back to Mobility directory so that next repo will start with new directory in same folder
cd -
pwd
done

Отредактируйте этот сценарий согласно требованию.

0 голосов
/ 13 ноября 2018

Вы можете добавить репозиторий Gitlab в качестве удаленного на вашем сервере. Тогда вы можете использовать push --all.

Примерно так в каждой директории репо:

git add remote gitlab <YOUR NEW REPO URL>
git push gitlab --all
...