Git倉庫遷移實操(附批量遷移腳本)

来源:https://www.cnblogs.com/xxcbdhxx/archive/2023/03/06/how-to-migrate-git-repository-with-command-line.html
-Advertisement-
Play Games

最近公司組織架構調整,整個組換到新部門,需要將原來組內的項目代碼,全部遷移到新的 group 中去(公司用的 gitlab 伺服器),要求保留所有的提交記錄、分支和標簽。我當然知道 Gitlab 本身是支持創建倉庫時通過鏈接導入的,但前提是管理員開啟相關功能。我們此處只講命令遷移方案。 ...


最近公司組織架構調整,整個組換到新部門,需要將原來組內的項目代碼,全部遷移到新的 group 中去(公司用的 gitlab 伺服器),要求保留所有的提交記錄、分支和標簽。

我當然知道 Gitlab 本身是支持創建倉庫時通過鏈接導入的,但前提是管理員開啟相關功能。我們此處只講命令遷移方案。

本文同步發佈於個人網站 https://ifuyao.com

一、遷移命令

命令遷移有三種方案。

1. 直接PUSH

  1. 保證本地倉庫最新
# 若本地沒有倉庫,則直接 clone 倉庫到本地
$ git clone git@host:group1/repo.git && cd repo
# 若本地已有倉庫,則拉取分支和標簽
$ git pull && git pull --tags
# 設置源
$ git remote set-url origin git@host:group2/repo.git
# 推送分支和標簽
$ git push && git push --tags

2. 鏡像

可以將源端倉庫,鏡像克隆到本地,再鏡像推送到目的端。

git clone --mirror git@host:group1/repo.git
git push --mirror git@host:group2/repo.git

3. 裸倉庫

可以將源端倉庫,克隆下來裸倉庫,再鏡像推送到目的端。

$ git clone --bare git@host:group1/repo.git
$ git push --mirror git@host:group2/repo.git

裸倉庫是 git 中的一個概念,只要在克隆時加一個 -–bare 選項即可。裸倉庫可以再次push到另一個源,所以可以完成我們倉庫遷移的任務。

需要註意,克隆下來的裸倉庫中只有 .git 內容,是沒有工作目錄的。這是不同於鏡像倉庫的地方。

二、批處理腳本

我們需要遷移的項目有幾十個,所以我這邊寫了個簡單的批處理腳本,在此也也分享給有需要的伙伴。

輸入文件 repos.txt 中按行寫入要遷移的倉庫名稱:

repo1
repo2
repo3

Linux/MacOS 遷移腳本 migrate.sh

#!/bin/bash

remote_old=git@host1:group1
remote_new=git@host2:group2

while read repo
do
    echo $repo
    git clone --bare "$remote_old/${repo}.git"
    cd "${repo}.git"
    git push --mirror "$remote_new/${repo}.git"
    cd ..
    rm -fr "${repo}.git"
done < repos.txt

Windows 遷移腳本 migrate.bat

@echo off

set remote_old=git@host1:group1
set remote_new=git@host2:group2
set input_file=repos.txt

SETLOCAL DisableDelayedExpansion
FOR /F "usebackq delims=" %%a in (`"findstr /n ^^ %input_file%"`) do (
    call :process %%a
)
goto :eof

:process
SETLOCAL EnableDelayedExpansion
set "repo=!%1!"
set "repo=!repo:*:=!"
echo !repo!
git clone --bare "%remote_old%/!repo!.git"
cd "!repo!.git"
git push --mirror "%remote_new%/!repo!.git"
cd ..
rmdir "!repo!.git"
ENDLOCAL
goto :eof

若對您有用,請一鍵三連(點贊、收藏、轉發),謝謝!

本文已獨家授權給公眾號 邏魔代碼 ,未經允許,禁止轉載!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 預告: 《MySQL實戰》即將出版,敬請關註! 有過線上 MySQL 維護經驗的童鞋都知道,主從延遲往往是一個讓人頭疼不已的問題。 不僅僅是其造成的潛在問題比較嚴重,而且主從延遲原因的定位尤其考量 DBA 的綜合能力:既要熟悉複製的內部原理,又能解讀主機層面的資源使用情況,甚至還要會分析 binlo ...
  • 摘要:本文簡單介紹sequence的使用場景及如何修改sequence的cache值提高性能。 本文分享自華為雲社區《GaussDB(DWS)關於sequence的那些事》,作者:Arrow0lf 。 什麼是sequence sequence,也稱作序列,是用來產生唯一整數的資料庫對象。序列的值按照 ...
  • GreatSQL社區原創內容未經授權不得隨意使用,轉載請聯繫小編並註明來源。 GreatSQL是MySQL的國產分支版本,使用上與MySQL一致。 作者: GreatSQL社區 文章來源:GreatSQL社區原創 背景介紹 功能特性 gt-checksum使用 3.1 標準使用案例 3.2 直接在命 ...
  • Naive Ui Admin 是一個基於 Vue3.0、Vite、 Naive UI、TypeScript 的中後臺解決方案,它使用了最新的前端技術棧,並提煉了典型的業務模型,頁面,包括二次封裝組件、動態菜單、許可權校驗、粒子化許可權控制等功能,它可以幫助你快速搭建企業級中後臺項目, 相信不管是從新技術 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 需求描述 如果想要做一個app的話,可以有很多種選擇方案,uni-app是其中的一個性價比高一些(坑多一些)的方案。本文記錄一下,uni-app打安卓包以後,需要檢查並下載更新,且顯示進度條的功能。 代碼在自己公司項目中應用,大家可放心使 ...
  • 1、首先 首先要解釋下,函數體內變數的作用域是在函數定義的時候就確定的,而不是運行時; 函數的上下文是在調用時確定的,函數體內的this指向其上下文; 箭頭函數沒有自己的this,它的this指向的是它上級的this,而它上級的this指向的是上級的上下文。 2、普通函數的this,指向其調用者,箭 ...
  • 三角形 有人說三維模型的基本單元是三角形。比如複雜的游戲角色,也只是用許多三角形畫出來的。 不管上述說法是否屬實,本篇先把三角形畫出來。 如何繪製一個三角形 滑鼠點擊繪點示例我們寫了這樣的代碼: points.forEach(item => { gl.vertexAttrib3f(a_Positio ...
  • 前端中的工廠模式是一種創建對象的設計模式,它可以讓我們封裝創建對象的細節,我們使用工廠方法而不是直接調用 new 關鍵字來創建對象,使得代碼更加清晰、簡潔和易於維護。在前端開發中,工廠模式通常用於創建多個相似但稍有不同的對象,比如創建一系列具有相同樣式和行為的按鈕或者表單。 在實現工廠模式時,通常需 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...