web-dev-qa-db-ja.com

CLIを使用して、既存のローカルgitリポジトリから新しいgitlabリポジトリを作成する方法は?

OSXには多くのローカルgitリポジトリがあります。コマンドラインを使用して https://gitlab.ccompanyname.com に新しいgitlabリポジトリを作成し、既存のローカルリポジトリを作成します。

それは可能ですか?

39
Jitendra Vyas

GitLabにプッシュするローカルリポジトリごとに、GitLabで新しい空のプロジェクトを作成します。プロジェクトを作成すると、デフォルトのプロジェクトページに移動します。

次に、既存の各gitリポジトリにcdします。 git remote add Origin <your new gitlab repo address>を実行します

そして、git Push -u Origin master

追加するリポジトリごとにこれを行う必要があります。

リポジトリのアドレスは、プロジェクトページで提供されます。 httpおよび/またはsshとして。ローカルマシンにすでにOriginというリモートがある場合、最初に名前を変更することをお勧めします。または、gitlabを別の何かと呼ぶことができます。また、すべてのブランチをgitlabにプッシュする場合は、git Push --all Originを実行できます。タグが必要な場合は、git Push --tags Origin

49
twk3

2018年のソリューション:--set-upstreamを使用するだけ

ローカルリポジトリごとに次の処理を行うスクリプトの作成を担当すると仮定すると、Gitlab 10.5の時点で簡単にできるようですつかいます

git Push --set-upstream address/your-project.git

これにより、Gitlabで新しいプロジェクトが作成されます。サーバーで手動で作成する必要はありません


ドキュメントから

新しいプロジェクトを作成するためにプッシュ

GitLabに移動して新しいプロジェクトを手動で作成してからレポジトリをプッシュする代わりに、ローカルで新しいレポジトリを作成すると、GitLabに直接プッシュして新しいプロジェクトを作成できます。その名前空間にアクセスできる場合、そのGitLab名前空間の下に、デフォルトで可視性がプライベートに設定された新しいプロジェクトが自動的に作成されます(プロジェクトの設定で後で変更できます)。

これは、SSHまたはHTTPを使用して実行できます。

## Git Push using SSH
git Push --set-upstream [email protected]:namespace/nonexistent-project.git master

## Git Push using HTTP
git Push --set-upstream https://gitlab.example.com/namespace/nonexistent-project.git master

プッシュが正常に終了すると、リモートメッセージに、リモートを設定するコマンドと新しいプロジェクトのURLが示されます。

remote:
remote: The private project namespace/nonexistent-project was created.
remote:
remote: To configure the remote, run:
remote:   git remote add Origin https://gitlab.example.com/namespace/nonexistent-project.git
remote:
remote: To view the project, visit:
remote:   https://gitlab.example.com/namespace/nonexistent-project
remote:
26
ted

GitlabのAPIラッパー サードパーティアプリケーション のドキュメントは理想的ではありませんが、そのうちの1つを機能させることができたことに同意する必要があります。

このために、Ubuntu 14.04を実行している浮浪者ボックスにサンドボックスgitlabサーバー(GitLab Community Edition 8.0.5)をセットアップします。

さて、私が使用したAPIラッパーは this onepython-gitlabbyGauvain Pocentek)です。私がこれを選んだのは、十分な人が星を付けているため(執筆時点で118)、pythonで書かれているため、移植性は問題になりません(私のホストマシンはWindowscygwinを使用しますが、この回答にはUNIX構文を使用します)。

pipを使用すると、インストールは非常に簡単です。

$ Sudo pip install python-gitlab

インストールしたら、構成ファイルを変更する必要があります-存在しないすぐに使用できるまたは、少なくとも、見つけることができませんでした(ドキュメントはありませんでした)これについて明確に)。このファイルの「公式」名は.python-gitlab.cfgであり、これはconfig.pyがデフォルトで検索するものです。

とにかく、プロジェクトの github にあるサンプル構文に基づいて、.python-gitlab.cfgの独自のバージョンを作成しました。

[global]
# required setting
default = local
# optional settings
ssl_verify = false
timeout = 5

[local]
# url = http://10.0.3.2:8080
# get the private token from the gitlab web interface
# private_token = vTbFeqJYCY3sibBP7BZM

[remote]
url = YOUR SERVER URL GOES HERE
private_token = YOUR PRIVATE TOKEN GOES HERE
ssl_verify = false

[remote-ssl]
url = YOUR HTTPS URL GOES HERE (eg https://gitlab.ccompanyname.com))
private_token = YOUR PRIVATE TOKEN GOES HERE
ssl_verify = true (VALID CERTIFICATE) OR false (SELF-SIGNED CERTIFICATE)

Webインターフェイスからプライベートトークンを取得する必要があります(Profile Settings::Account) README指摘、

プライベートトークン認証のみがサポートされます(ユーザー/パスワードはサポートされません)。


これを処理した後、プロジェクトの作成は、httpに対して次のように実現できます。

$ gitlab -c "PATH/TO/YOUR/.python-gitlab.cfg" --gitlab remote project create --name YOUR_PROJECT_NAME

httpsの場合:

$ gitlab -c "PATH/TO/YOUR/.python-gitlab.cfg" --gitlab remote-ssl project create --name YOUR_PROJECT_NAME

上記で使用したスイッチは、ヘルプを見ると見つかります。

$ gitlab --help

ここで、assumingSSHキー(ローカルとWebインターフェースの両方)を処理し、gitlabリポジトリ名をディレクトリ内のディレクトリと同じにすることを想定しています次に、ローカルgit、次のような小さなbashスクリプトを使用して、プロジェクトの作成とローカルリポジトリプッシュを自動化できます。

#!/usr/bin/bash

cd 'PATH/TO/YOUR/REPOS/DIRECTORY' # enter your local repos dir here
server="YOUR SERVER" # enter your server URL
user="YOUR USER" # enter your user name
gitlab_cfg="PATH/TO/YOUR/.python-gitlab.cfg" # enter the location of config file
#method="remote" # uncomment for http, comment for https
method="remote-ssl" # uncomment for https, comment for http
for i in $( ls -1 ); do 
    echo
    echo
    echo '>> Creating Project'
    gitlab -c $gitlab_cfg --gitlab $method project create --name $i
    echo '>> Project ' $i 'created'
    echo '>> ------'
    cd $i
    li=$( tr '[A-Z]' '[a-z]' <<< $i) # convert dirname to lowercase, safe with older bashes (<4)
    Origin="git@$server:$user/$li.git"
    echo ">> Reassigning Origin to : $Origin"
    git remote rm Origin
    git remote add Origin $Origin
    git remote -v
    echo '>> Pushing local repo to gitlab'
    git Push -u Origin master
    echo '>> Done'
    echo
    echo
    cd ..
done
echo
echo 'Operation finished'

それは、外側のローカルgitディレクトリで見つかったディレクトリ名にちなんで名付けられたgitlabプロジェクトを作成し、それらのそれぞれにcdを追加し、Originを更新してからプッシュを実行します。

ここで言及すべきことの1つは、gitlabがリポジトリのURLを小文字に変換することです。たとえば、sampleRepo001はリポジトリのURLでsamplerepo001になります。そのため、スクリプトでディレクトリ名を小文字に変換しています。

そして最後に、スクリプトの実行例を次に示します。

enter image description here

念のため、このスクリプトを使用する場合は、実際の運用サーバーに適用する前に徹底的にテストしてください。


Update-HTTPS/SSLの処理方法に関する情報を追加しました。

9
sokin

git-repoはあなたのために汚い仕事をしました。また、GitLab、GitHub、Bitbucketもサポートしています。

1.インストール

apt-get install python-pip
pip install git-repo

上記のコマンドが機能しない場合は、pip3が必要になる場合があります。

(optional)
apt-get install python3-pip
pip3 install git-repo

2構成

2.1必要な構成

git repo config

コマンドラインツールは、bitbucket、github、gitlabアカウントをセットアップするかどうかを段階的に尋ね、それに応じて「y/n」とユーザー名/パスワードを押します。意味がわからない場合は、「n」を押してスキップします。構成ファイルは~/.gitconfigに生成されます。後で微調整することもできます。

(オプション)たとえば、次のように〜/ .gitconfigにトークンを手動で設定できます。

[gitrepo "gitlab"]
    token = xxxxxxx
[gitrepo "github"]
    token = xxxxxxx

2.2より良いショートカット

〜/ .gitconfigに次の行を追加します。

[alias]
hub = repo hub
lab = repo lab

どうして?

なぜなら、今では単にshortcutを使用できるからです
git lab clone/howto
git hub clone/howto
将来は。
authenticationリポジトリーを複製するにはprivateが必要です

2.3(オプション)プライベートアクセス権の追加

cd ~/.ssh

id_rsa.pubファイルがあるかどうかを確認してください。 pubはパブリックファイルを意味します。コンテンツ全体をcopy、gitlab.comのパブリックssh Webページにpasteだけを使用することをお勧めします。
完了。
対応するファイルid_rsaについて他の人に見せないでください。これは、gitlabリポジトリにアクセスするためのキーです。 id_rsaを持ち、許可chmod 600 id_rsaを持つ他のクライアント/コンピューターは、リポジトリを制御できます。

id_rsa.pubが表示されない場合は、次を使用して生成できます。

ssh-keygen -t rsa

enterを押してデフォルトのままにします。これで、〜/ .sshディレクトリ内にid_rsa.pubid_rsaが表示されます。デフォルトでid_rsa以外の別の名前を使用している場合、〜/ .ssh/configファイルを次のように変更する必要があります。

# private account
Host github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/github

3. git-repoの使用法

新しいプロジェクトを開始するときに、GitLabから次の場所にプッシュする新しいリポジトリを作成します。

git lab create <username>/howto

もちろん、削除したり、リポジトリをリストしたり、その他のことを行うことができます。

git lab delete <username>/howto
git lab list <username>
git lab clone <username>/howto
git clone [email protected]:<username>/howto


実用例

しばらくコミットされたgitでローカルのmyprojectディレクトリを開発したと仮定します。次に、GitLabにアップロードします。

gitlabでリモートリポジトリを作成します。 gitlabページにusername/myprojectが表示されます。

git lab create username/myproject

ローカルmyprojectディレクトリの下に.gitファイルがあると仮定します

cd myproject

ローカルディレクトリをリモートgitlab.comリポジトリにリンクします。

git lab add username/myproject

myprojectディレクトリをgitlab.comにアップロードします

git Push -u gitlab master

やった

0
anonymous

Nodejsを使用する場合、または単純に理解している場合でも、 node-gitlab モジュールは素晴らしいです。自己ホスト型のGitlabインスタンスで、プロジェクトを作成し、リモートリポジトリ(ローカルgitサーバー)からリポジトリをインポートすることができました。このプロセスは、ローカルリポジトリの場合と同様である必要があります。マシンにローカルgitサーバーをセットアップし、それを各Gitlabプロジェクトのimport_urlとして使用できます。

または、APIを使用してプロジェクトを作成し、各リポジトリをそれぞれのプロジェクトにプッシュするスクリプトを作成できます。

擬似コード:ディレクトリ内の各リポジトリに対して:

  • APIを使用してgitlab.comでプロジェクトを作成します
  • git remote add gitlab url-to-gitlab-repo
  • git Push gitlab --mirror
0
user3606666