【问题标题】:How to transfer existing git repo from local server to gitlab repo, using CLI(Shell script)?如何使用 CLI(Shell 脚本)将现有的 git 存储库从本地服务器传输到 gitlab 存储库?
【发布时间】:2019-04-16 02:39:16
【问题描述】:

我在 我的服务器上有 许多 git repos。使用命令行(脚本)我想在https://gitlab.companyname.com 上创建新的 gitlab 存储库,形成现有的本地存储库。并在 gitLab 服务器上推送所有带有标签的分支。

没有企业账号也可以吗?

【问题讨论】:

  • git push --all 应该注意“所有分支和标签”的要求
  • @ohlec 同意。但我需要将所有项目克隆到本地目录(从本地服务器)然后需要将克隆的项目转移到 gitlab 服务器上。

标签: git shell github gitlab command-line-interface


【解决方案1】:

通过filename.sh保存下面的文件 - 打开终端 - 转到文件保存的目录 - 输入“sh filename.sh”命令并回车

这里所有来自本地服务器的项目都使用这个 shell 脚本移动到你的 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

根据需要编辑此脚本。

【讨论】:

    【解决方案2】:

    您可以将 gitlab 存储库作为远程服务器添加到服务器中。然后你可以使用 push --all。

    在您拥有的每个 repo 目录中都有这样的内容:

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

    【讨论】:

      【解决方案3】:

      我的朋友为此构建了一个脚本(需要 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. 如果目录路径存在,cd进入并调用git pull

      2. 如果目录路径不存在,调用git clone

      【讨论】:

        猜你喜欢
        • 2016-01-11
        • 2020-12-06
        • 1970-01-01
        • 2020-09-23
        • 1970-01-01
        • 2019-09-03
        • 2011-01-18
        • 2011-07-29
        • 2023-03-23
        相关资源
        最近更新 更多