This is Gentoo's testing wiki. It is a non-operational environment and its textual content is outdated.
Please visit our production wiki at https://wiki.gentoo.org
GitHub Pull Requests
Step 0 variant a: User configures the local repository
Clone the github mirror of the Gentoo repository under the remote name "upstream".
user $
git clone -o upstream git@github.com:gentoo/gentoo.git
Fork the Gentoo repository on GitHub and then add it under the remote name "github" to your local repository.
user $
git remote add github <UrlOfYourFork.git>
Step 0 variant b: using git as the main portage tree
This setup is not fully functional since the plain developer repository as obtained from github lacks the metadata generated for the official tree.
root #
mkdir /etc/portage/repos.conf/
root #
vim /etc/portage/repos.conf/gentoo.conf
Add the following to the file:
[gentoo] location = /usr/portage sync-type = git sync-uri = https://github.com/gentoo/gentoo.git auto-sync = yes sync-user = portage:portage
root #
vim /etc/portage/repo.postsync.d/99-user-dev-perms
Add the following, changing <dev_user_name>.
#!/bin/bash USER_NAME=<dev_user_name> find /usr/portage/ -type d -exec setfacl -m u:$USER_NAME:rwx {} \; find /usr/portage/ -type f -exec setfacl -m u:$USER_NAME:rw {} \; find /usr/portage/.git -type d -exec setfacl -m u:$USER_NAME:rwx {} \; find /usr/portage/.git -type f -exec setfacl -m u:$USER_NAME:rw {} \;
root #
chmod +x /etc/portage/repo.postsync.d/99-user-dev-perms
Then sync the tree.
root #
emerge --sync
Fork the Gentoo repository on GitHub and then add it under the remote name "github" to your local repository.
Add your remote fork you created under the remote name "github" to your local repository.
Step 1: set up the repo's config
user $
cd <overlay_path>
user $
git remote add github <YOURURLHERE>
user $
git config --local user.name "Your Full Name"
user $
git config --local user.email "example@domain.tld"
user $
git config --local pull.ff only
user $
git config --local pull.rebase preserve
user $
git config --local push.default simple
Step 2: GPG Configuration
user $
vim ~/.gnupg/gpg.conf
Add the following:
keyserver hkps://hkps.pool.sks-keyservers.net keyserver-options ca-cert-file=/usr/share/gnupg/sks-keyservers.netCA.pem keyserver-options no-honor-keyserver-url cert-digest-algo SHA512 default-preference-list SHA512 SHA384 SHA256 SHA224 AES256 AES192 AES CAST5 ZLIB BZIP2 ZIP Uncompressed
Now to generate the key:
user $
gpg --full-generate-key
Select the algorithm Set the key size Specify how long the key should be valid (No more then 5 years) Confirm the information is correct Set your name set your email Set your passphrase, and confirm it.
It might take some time if you've chosen a high bit length key.
Upload your key to the keyserver.
user $
gpg --keyserver pool.sks-keyservers.net --send-key example@domain.tld
To get your GPG key run this command. It should be the top line (starting with pub). If you have more than one key with the UID you will need to select the correct key yourself (from the list of returned keys).
user $
gpg --list-public-keys --keyid-format 0xlong example@domain.tld
You want the keyID from the line that starts with 'pub' and what is after the algorithm and the / eg:
pub rsa4096/0x000000000000000
user $
git config --local user.signingkey 0x000000000000000
user $
git config --local commit.gpgsign 1
user $
git config --local push.gpgsign 0
Step 3: User updates the local repository
Say you are making changes to package app-foo/bar. Create a local branch with your changes:
user $
git checkout -b app-foo/bar master
Make your changes and make sure to run repoman to check for basic errors:
user $
repoman -dx full
Then commit your changes (if you're closing some bugs on Bugzilla, you can mention them here as suggested by GLEP66):
user $
repoman ci
Step 4: User makes a pull request
Now that you've made your changes and updated your local branch, it's time to send it off to GitHub and make a PR (Pull Request) to the Gentoo Developers.
Start by pushing the branch with your changes to your GitHub repository:
user $
git push github app-foo/bar
Then create a pull request from your GitHub repository's local branch to the Gentoo repository's master branch. When your changes have been merged, you may delete your local repository's branch with:
user $
git branch -d app-foo/bar
Step 5: Developer fetches the PR and reviews
dev $
curl -s -L "https://github.com/gentoo/gentoo/pull/1.patch" | git am -S
dev $
repoman full -x
dev $
# tests
Step 6: Developer merges to the tree
dev $
git push --signed origin master
References
https://www.gentoo.org/glep/glep-0066.html
https://wiki.gentoo.org/wiki/Gentoo_git_workflow
https://wiki.gentoo.org/wiki/Gentoo_GitHub
https://www.gentoo.org/glep/glep-0063.html
https://wiki.gentoo.org/wiki/Project:GitHub/Pull_requests