Difference between revisions of "Git/GitLab"

From Ever changing code
< Git
Jump to navigation Jump to search
Line 1: Line 1:
= GitLab - download all repositories =
= GitLab - download all repositories =
{{Note|Pending update 2020, to distinguish all repos vs private to view as it's a difference when hosting on GitLab.com and your own server where 'public' repos are still private to you. This is not a case for GitLab.com }}
You can get token when log in to your account > settings and generate access token. Assign all permissions. Also so you know v3 APIs may be deployed on older version Gitlab.
You can get token when log in to your account > settings and generate access token. Assign all permissions. Also so you know v3 APIs may be deployed on older version Gitlab.
<source lang="bash">
<source lang="bash">
Line 37: Line 38:
{"path":"project-y","git":"git@<host.com>:Spikes/AWS/project-y.git"}
{"path":"project-y","git":"git@<host.com>:Spikes/AWS/project-y.git"}
</source>
</source>


= Reset a user password =
= Reset a user password =

Revision as of 18:57, 17 July 2020

GitLab - download all repositories

Note: Pending update 2020, to distinguish all repos vs private to view as it's a difference when hosting on GitLab.com and your own server where 'public' repos are still private to you. This is not a case for GitLab.com You can get token when log in to your account > settings and generate access token. Assign all permissions. Also so you know v3 APIs may be deployed on older version Gitlab.

#!/bin/bash 

# Get pages count of all repos you can access
# $ curl --head "http://<host.com>/api/v4/projects?private_token=<token>=100&page=1" | grep Total
#   X-Total: 509
#   X-Total-Pages: 6

#Create JSON file with repo name and path
#for PAGE in {1..6}; do curl "<host.com>/api/v4/projects?private_token=CMQdz-Qik8XanGYJTbnH&per_page=100&page=$PAGE" | jq --raw-output --compact-output ".[] | { "path": .path, "git": .ssh_url_to_repo }" >> repos.json; done

[ -d repos ] || mkdir repos
cd repos
while read repo; do
    THEPATH=$(echo "$repo" | jq -r ".path")
    echo "path: $THEPATH"
    GIT=$(echo "$repo" | jq -r ".git")
    echo "git: $GIT"

    if [ ! -d "$THEPATH" ]; then
        echo "Cloning $THEPATH ( $GIT )"
        git clone "$GIT"
    else
        echo "Pulling $THEPATH"
        (cd "$THEPATH" && git pull)
    fi
done < "../$FILENAME"
cd ..


Example repos.json

{"path":"project-x","git":"git@<host.com>:Spikes/project-x.git"}
{"path":"project-y","git":"git@<host.com>:Spikes/AWS/project-y.git"}

Reset a user password

This could be also root user.

ubuntu@gitlab:~$  sudo gitlab-rails console
-------------------------------------------------------------------------------------
 GitLab:       11.4.0 (6ebbd70)
 GitLab Shell: 8.3.3
 postgresql:   9.6.8
-------------------------------------------------------------------------------------
Loading production environment (Rails 4.2.10)
irb(main):001:0> user = User.find_by(username: "bob")
                 user = User.find_by(id: 1)    //by id
=> #<User id:5 @bob>
irb(main):002:0> user.password = 'test1234'    //at least 8 characters long
=> "test1"
irb(main):003:0> user.password_confirmation = 'test1234'
=> "test1"
irb(main):007:0> user.unlock_access!
=> true
irb(main):008:0> user.save!
=> false

Deployment token

In course to grant access to a single repository for reading, writting or both we can use feature called Deploy Tokens. Go to repository > repository settings > Deploy Tokens to create one.

ClipCapIt-191107-092625.PNG


Access repository

# Syntax
# git clone http://<username>:<deploy_token>@gitlab.example.com/tanuki/awesome_project.git

# Example
git clone https://darkmatter:PLjeFh56F15yJeq8xrZv@gitlab.com/hackerrank1/apache-nginx-ssl.git
Cloning into 'apache-nginx-ssl'...
remote: Enumerating objects: 110, done.
remote: Counting objects: 100% (110/110), done.
...
References

GitLab CI

References