Difference between revisions of "Newbie Guide for Windows People Working on Minor Bugs"

From Dreamwidth Notes
Jump to: navigation, search
m
(Major update which should cover all the basics)
Line 1: Line 1:
 
{{Warn|text=This guide is currently being rewritten to reflect the new workflow. Some things may be unclear, some things may no longer be relevant, some things may be missing. Please be patient.}}
 
{{Warn|text=This guide is currently being rewritten to reflect the new workflow. Some things may be unclear, some things may no longer be relevant, some things may be missing. Please be patient.}}
  
{{Note|text=Feel free to correct, add, expand, anything that could make this better and clearer. ^_^}}
+
{{Note|text=Feel free to correct, expand, do anything which could make this better and clearer. ^_^}}
  
  
Line 27: Line 27:
 
== Create an account on GitHub ==
 
== Create an account on GitHub ==
  
* Go to [http://www.github.com/ GitHub], click on 'sign up and pricing' and create a free account. I suggest you pick a username people are familiar with. Ideally the same username you'll have on your Bugzilla account.
+
* Go to [http://www.github.com/ GitHub], click on 'sign up and pricing' and create a free account. I suggest you pick a username people are familiar with and the same username you'll have on your Bugzilla account.
  
  
Line 80: Line 80:
 
== On your Dreamhack ==
 
== On your Dreamhack ==
  
Now you need to 'import' both of these onto your Dreamhack and link them to the original Dreamwidth repositories on GitHub so you can easily fetch updates. The free part goes into <code>~/dw/*</code> while the non-free part goes into <code>~/dw/ext/dw-nonfree/*</code>.
+
Now you need to 'import' both of these onto your Dreamhack and link them to the original Dreamwidth repositories on GitHub so you can easily fetch updates.
  
 
To do so, [[Moving_your_Dreamwidth_installation_to_use_Github#Stop_the_server_and_all_workers | follow all the steps from this point on until you start your server again]] (but skip the 'non-dreamhack users' section, of course).
 
To do so, [[Moving_your_Dreamwidth_installation_to_use_Github#Stop_the_server_and_all_workers | follow all the steps from this point on until you start your server again]] (but skip the 'non-dreamhack users' section, of course).
Line 88: Line 88:
  
 
These are not mandatory but will make your life easier.
 
These are not mandatory but will make your life easier.
 +
 +
== Change some git settings ==
 +
 +
I suggest going through [Git_settings#Recommended_settings|all the steps mentioned in this section].
 +
 +
 +
{{Note|text=If anybody knows how to make your default Windows editor git's default editor, please say so. I've read multiple articles on this topic and nothing worked for me.}}
  
  
Line 105: Line 112:
 
* In PuTTY, type this to make the changes go live on your Dreamhack:
 
* In PuTTY, type this to make the changes go live on your Dreamhack:
  
FIXME
+
<syntaxhighlight lang="bash">$LJHOME/bin/upgrading/update-db.pl -r -p --innodb
 +
$LJHOME/bin/upgrading/update-db.pl -r --cluster=all --innodb
 +
$LJHOME/bin/upgrading/texttool.pl load</syntaxhighlight>
  
  
Line 114: Line 123:
 
* Code is committed by developers all the time. You must regularly update your repositories with the <code>pull</code> command:
 
* Code is committed by developers all the time. You must regularly update your repositories with the <code>pull</code> command:
  
<source lang="bash">cd $LJHOME
+
<syntaxhighlight lang="bash">cd $LJHOME
 
git pull dreamwidth develop:develop
 
git pull dreamwidth develop:develop
git pull dreamwidth master:master</source>
+
git pull dreamwidth master:master</syntaxhighlight>
  
 
* To push the changes to your GitHub account you need to add this:
 
* To push the changes to your GitHub account you need to add this:
  
<source lang="bash">git push origin develop
+
<syntaxhighlight lang="bash">git push origin develop
git push origin master</source>
+
git push origin master</syntaxhighlight>
  
 
* For the nonfree part of the code, the commands are exactly the same except the one to go to the correct directory:
 
* For the nonfree part of the code, the commands are exactly the same except the one to go to the correct directory:
  
<source lang="bash">cd $LJHOME/ext/dw-nonfree</source>
+
<syntaxhighlight lang="bash">cd $LJHOME/ext/dw-nonfree</syntaxhighlight>
  
 +
* You can also create a script to make it simpler. See [[Dev_Maintenance#dwu_-_Updating_the_repos | this article]].
  
== Updating your database ==
+
: N.B. to create a new file on WinSCP, right click into the correct folder (<code>/bin</code> here) then click on New/File.
  
* Type this:
 
  
<source lang="bash">$LJHOME/bin/upgrading/update-db.pl -r -p --innodb
+
== Updating your database ==
$LJHOME/bin/upgrading/update-db.pl -r --cluster=all --innodb
+
$LJHOME/bin/upgrading/texttool.pl load</source>
+
  
 +
* We're already seen this once but here it is again:
  
* You can also create a script to make it easier. See [[Dev_Maintenance#dwdb_-_Updating_the_database | this article]].
+
<syntaxhighlight lang="bash">$LJHOME/bin/upgrading/update-db.pl -r -p --innodb
 +
$LJHOME/bin/upgrading/update-db.pl -r --cluster=all --innodb
 +
$LJHOME/bin/upgrading/texttool.pl load</syntaxhighlight>
  
FIXME: expand.
+
* You can also create a script to make it simpler. See [[Dev_Maintenance#dwdb_-_Updating_the_database | this article]].
  
  
= Before You Edit Anything =
+
= Making changes to the code =
  
== Find or File a Bug ==
+
== Find or file a bug ==
  
 
* To find: you can use [http://bugs.dwscoalition.org/userprefs.cgi?tab=saved-searches predefined searches] such as [http://bugs.dwscoalition.org/buglist.cgi?cmdtype=dorem&remaction=run&namedcmd=unassigned%20effort-minor&sharer_id=2 unassigned effort-minor].
 
* To find: you can use [http://bugs.dwscoalition.org/userprefs.cgi?tab=saved-searches predefined searches] such as [http://bugs.dwscoalition.org/buglist.cgi?cmdtype=dorem&remaction=run&namedcmd=unassigned%20effort-minor&sharer_id=2 unassigned effort-minor].
Line 156: Line 166:
 
: To make this easier, you can also use of <dwuser>fu</dwuser>'s Greasemonkey scripts: [http://www.afunamatata.com/greasemonkey/ Dreamwidth Bug Grabber]. Click on (grab!) next to Assign To and this will edit it and Status for you. Click on Save Changes of course.
 
: To make this easier, you can also use of <dwuser>fu</dwuser>'s Greasemonkey scripts: [http://www.afunamatata.com/greasemonkey/ Dreamwidth Bug Grabber]. Click on (grab!) next to Assign To and this will edit it and Status for you. Click on Save Changes of course.
  
== Create a Patch ==
 
  
FIXME
+
== Create a branch ==
  
= Edit Files =
+
* You're going to create a new branch on your own copy of the Dreamwidth repository specifically dedicated to the bug you want to work on. Use the bug number and a short description in the name, like so:
 +
 
 +
<syntaxhighlight lang="bash">git branch bug###/xxx</syntaxhighlight>
 +
 
 +
* To switch to this branch, use the <code>checkout</code> command and the name of your branch:
 +
 
 +
<syntaxhighlight lang="bash">git checkout bug###/xxx</syntaxhighlight>
 +
 
 +
* And that's it. Now you can start coding!
 +
 
 +
 
 +
== Edit files ==
  
 
* Use WinSCP to open the file(s) you need to edit.
 
* Use WinSCP to open the file(s) you need to edit.
  
* If you're working on site pages, you're working on .bml files. These are in <code>~dw/cvs/dw-free/htdocs/</code> or one of the subsequent folders. You'll see that their names correspond to the URLs of site pages. These files may use .pm modules/widgets which are in <code>~dw/cvs/dw-free/cgi-bin/DW/</code> or <code>~dw/cvs/dw-free/cgi-bin/LJ/</code>.
+
* Remember that the free part of the code is in <code>~/dw/*</code> while the non-free part is in <code>~/dw/ext/dw-nonfree/*</code>.
 +
 
 +
* If you're working on site pages, you're working on .bml files. These are in <code>~dw/htdocs/</code> or one of the subsequent folders. You'll see that their names correspond to the URLs of site pages. These files may use .pm modules/widgets which are in <code>~dw/cgi-bin/DW/</code> or <code>~dw/LJ/</code>.
  
* For text strings which are not in <code>~dw/cvs/dw-free/htdocs/xxx.bml.text</code> files, see <code>~dw/cvs/dw-free/bin/upgrading/en.dat</code>.
+
* For text strings which are not in <code>~dw/htdocs/xxx.bml.text</code> files, see <code>~dw/bin/upgrading/en.dat</code>.
  
 
* For more specific searches, you can use the grep command: <code>grep [option(s)] pattern [file(s)]</code>
 
* For more specific searches, you can use the grep command: <code>grep [option(s)] pattern [file(s)]</code>
Line 184: Line 206:
  
 
: This will search for "find this text" in all files.
 
: This will search for "find this text" in all files.
 +
 +
<syntaxhighlight lang="bash">grep -ri "find this text" * | more</syntaxhighlight>
 +
 +
: This will search for "find this text" in all files but only display the relevant filenames and not any excerpts.
  
 
<syntaxhighlight lang="bash">grep -rl print_entry $LJHOME/bin/upgrading/s2layers</syntaxhighlight>
 
<syntaxhighlight lang="bash">grep -rl print_entry $LJHOME/bin/upgrading/s2layers</syntaxhighlight>
  
: This will search for files containing "print_entry" in the /s2layers folder.
+
: This will search for files containing "print_entry" in the /s2layers folder, and only display the filenames are results.
 +
 
  
 
= Test Your Changes on Your Dreamhack =
 
= Test Your Changes on Your Dreamhack =
  
 
* In PuTTY, stop your Dreamhack:
 
* In PuTTY, stop your Dreamhack:
<syntaxhighlight lang="bash">cd $LJHOME
+
<syntaxhighlight lang="bash">stop-apache</syntaxhighlight>
stop-apache</syntaxhighlight>
+
  
* Update your database:
+
* Update your databas using this or the <code>dwdb</code> you created:
FIXME
+
 
 +
<syntaxhighlight lang="bash">$LJHOME/bin/upgrading/update-db.pl -r -p --innodb
 +
$LJHOME/bin/upgrading/update-db.pl -r --cluster=all --innodb
 +
$LJHOME/bin/upgrading/texttool.pl load</syntaxhighlight>
  
 
* Start your Dreamhack again:
 
* Start your Dreamhack again:
Line 204: Line 233:
  
  
= Submit Your Patch =
+
= Request your changes to be pulled into Dreamwidth =
  
== Update & Save Your Patch ==
+
== Commit your changes ==
  
FIXME
+
* Use the <code>commit</code> command:
  
== Upload Your Patch to Bugzilla ==
+
<syntaxhighlight lang="bash">git commit</syntaxhighlight>
  
* Log in to [http://bugs.dwscoalition.org/ Bugzilla] and open your bug.
+
* This will also open the nano editor so that you can type a commit message. Mention the bug number again and explain (quite briefly) what your changes do.
  
* Click on 'Add an Attachment' to attach your patch. Add a description, check 'patch' and set Flags/Commit and Flags/Review to ?. Feel free to add a comment if you have questions or remarks. Click on Submit.
 
  
: To help you with this, you can use one of <dwuser>fu</dwuser>'s Greasemonkey scripts: [http://www.afunamatata.com/greasemonkey/ Dreamwidth Patch Upload Defaults]. This will automatically check 'patch' and set the flags for you.
+
== Push the changes to your GitHub fork ==
 +
 
 +
* Use the <code>push</code> command and the branch name to push your changes to GitHub:
 +
 
 +
<syntaxhighlight lang="bash">git push origin bug###/xxx</syntaxhighlight>
 +
 
 +
 
 +
== Request your changes to be pulled into the main code ==
 +
 
 +
* On your GitHub page, click on the correct repository (dw-free or dw-nonfree), select the correct branch in the branch drop-down menu (this is below 'Clone in Windows') then click on Pull Request (it's at the top).
 +
 
 +
 
 +
== Note the pull request on Bugzilla ==
 +
 
 +
* On your hard drive, create a simple text file indicating your patch is on GitHub (use a generic file).
 +
 
 +
* Log in to [http://bugs.dwscoalition.org/ Bugzilla] and open your bug.
 +
 
 +
* Click on 'Add an Attachment' to attach your text file. Add a link to your pull request in the description, check and set Flags/Commit and Flags/Review to ?. Feel free to add questions or remarks. Click on Submit.
  
 
* Wait for someone to review and commit your patch. You're done. :)
 
* Wait for someone to review and commit your patch. You're done. :)
Line 222: Line 268:
 
* (optional) [[Patches|Further reading on patches]]
 
* (optional) [[Patches|Further reading on patches]]
  
= More: Troubleshooting Tips =
 
  
== Issues With Text Strings ==
+
= More: stashing your changes =
 +
 
 +
FIXME
 +
 
 +
 
 +
= More: deleting a branch =
 +
 
 +
FIXME
 +
 
 +
 
 +
= More: troubleshooting tips =
 +
 
 +
== Issues with text strings ==
  
 
* As <dwuser>denise</dwuser> explained [http://dw-dev-training.dreamwidth.org/13233.html here], you need to delete old text strings and create new ones when you edit .text files or en.dat instead of simply editing the text. If the change isn't critical - the string doesn't need to be renamed or the text change is minor - it's better to notify the site copy team so that text can be changed locally and the original file left alone.
 
* As <dwuser>denise</dwuser> explained [http://dw-dev-training.dreamwidth.org/13233.html here], you need to delete old text strings and create new ones when you edit .text files or en.dat instead of simply editing the text. If the change isn't critical - the string doesn't need to be renamed or the text change is minor - it's better to notify the site copy team so that text can be changed locally and the original file left alone.
Line 230: Line 287:
 
* If text you've modified doesn't appear on the site after a code push, append <code>?uselang=debug</code> to the page URL to make sure it's using the right string. If it is and it still doesn't display after a while, comment on <dwcomm>dw_maintenance</dwcomm>.
 
* If text you've modified doesn't appear on the site after a code push, append <code>?uselang=debug</code> to the page URL to make sure it's using the right string. If it is and it still doesn't display after a while, comment on <dwcomm>dw_maintenance</dwcomm>.
  
== Starting Over ==
+
== Starting over ==
  
 
* If something's really wrong you can also [[Dreamhack_Troubleshooting#I_want_to_wipe_my_install_and_start_over|rebuild you Dreamhack and start over]].
 
* If something's really wrong you can also [[Dreamhack_Troubleshooting#I_want_to_wipe_my_install_and_start_over|rebuild you Dreamhack and start over]].
 +
 +
* Delete your copies of the Dreamwidth repositories:
 +
 +
FIXME
  
  
 
= References =
 
= References =
  
* [http://ss64.com/bash/ Bash commands ]
+
* [Moving_your_Dreamwidth_installation_to_use_Github|Moving to GitHub]
 +
* [Dev_Maintenance|Development Maintenance]
 +
* [Draft:_Github_development_process|Github Development Process]
 +
* [http://ss64.com/bash/ Bash commands]
 +
* [Git_Getting_Started|Git: Getting Started]
 +
* [http://learn.github.com/p/intro.html Learn.GitHub]
  
 
[[Category:Development]]
 
[[Category:Development]]
 
[[Category:Getting Started]]
 
[[Category:Getting Started]]

Revision as of 10:24, 26 August 2012

Warning: This guide is currently being rewritten to reflect the new workflow. Some things may be unclear, some things may no longer be relevant, some things may be missing. Please be patient.
Note: Feel free to correct, expand, do anything which could make this better and clearer. ^_^


What do you need and why?

Because you're on Windows, you have to use quite a number of tools to access and manage things so this part might seem a little daunting. The good news is that 1) you're used to being flexible and resourceful, right? 2) once you've got everything set up things will be much simpler.

So what do you need?

  1. You need a Dreamhack where you'll clone the Dreamwidth code. Think of it as an online mirror of the Dreamwidth site.
  2. You need a Github account to be able to clone the Dreamwith repository code into your Dreamhack and fetch updates. This is your code source.
  3. You need PuTTY to connect GitHub to your Dreamhack, and to access and manage it. PuTTY is your center of command. You can't do anything without it.
  4. You need WinSCP to visualize the files on your Dreamhack and be able to open them in a text editor.
  5. You need a text editor to edit your files.
  6. You need a Bugzilla account to find bugs, files bugs and upload patches.


Get a Dreamhack

  • Apply for a Dreamhack by filling this form. The two important fields are 'your desired username' and 'your email address'. Your username is used to manage your Dreamhack and to create the URL where your Dreamhack will be located at so you can pick anything. Your email address is used to send you a welcome e-mail which contains important information as well as various alerts. You can pick any of your existing email addresses or choose to create an email account entirely devoted to your development work.
  • Once you're done, you should get an e-mail with your login username and a password. Don't lose it.


Create an account on GitHub

  • Go to GitHub, click on 'sign up and pricing' and create a free account. I suggest you pick a username people are familiar with and the same username you'll have on your Bugzilla account.


Install PuTTY

  • Download 'Windows installer for everything except PuTTYtel' .exe file at PuTTY and install it.
  • Run PuTTY. In the configuration window, enter "hack.dreamwidth.net" for the host name. Go to Connection/Data and enter the username/login given to you in the welcome e-mail. It should be something like dh-username.
  • Click on Open. If you get a pop-up message about a key, click Yes.
  • Enter the password given to you in the welcome e-mail when asked. Note that no characters are displayed and the cursor won't move. It's normal.
  • Change your password by typing:
passwd
  • Your default Dreamhack account is called system. Type this to set its password:
$LJHOME/bin/upgrading/make_system.pl


Install WinSCP

  • Install WinSCP. During the installation, you may be asked about the mode you prefer: Commander and Explorer. Commander works like an FTP client: a partitioned window with your computer files on one side and the Dreamhack files on the other. Explorer will only display your Dreamhack files and works like Windows's Explorer. I prefer this mode because I rarely need to access my computer files but choose what's easiest for you.
  • Use "hack.dreamwidth.net" for the host name. Enter your username and your new password. Click on Save then on Login.


Get a good text editor

While you can use Notepad, I recommend Notepad++ instead. It's free, simple and will make editing much easier.


Create a Bugzilla account

  • As [info]mark explained here, go to Name and Password and enter your name following this format: Name [:username]. 'Name' can be your real name, a nickname, your username again, etc. You don't have to give your real name if you don't want to.


Setting things up

On your GitHub account

You need to fork the Dreamwidth code onto your own account. Forking is like cloning and branching. It will copy the code and also label your copy as being a branch (a fork) of the original Dreamwidth code.


On your Dreamhack

Now you need to 'import' both of these onto your Dreamhack and link them to the original Dreamwidth repositories on GitHub so you can easily fetch updates.

To do so, follow all the steps from this point on until you start your server again (but skip the 'non-dreamhack users' section, of course).


Further steps on your Dreamhack

These are not mandatory but will make your life easier.

Change some git settings

I suggest going through [Git_settings#Recommended_settings|all the steps mentioned in this section].


Note: If anybody knows how to make your default Windows editor git's default editor, please say so. I've read multiple articles on this topic and nothing worked for me.


Give special abilities to your system account


Get rid of invite codes

  • In WinSCP, go to /dw/ext/local/etc/, and double-click on config.pl. Find $USE_ACCT_CODES = 1; and change 1 to 0. Save your file.
  • In PuTTY, type this to make the changes go live on your Dreamhack:
$LJHOME/bin/upgrading/update-db.pl -r -p --innodb
$LJHOME/bin/upgrading/update-db.pl -r --cluster=all --innodb
$LJHOME/bin/upgrading/texttool.pl load


Making sure things are up-to-date

Updating your code

  • Code is committed by developers all the time. You must regularly update your repositories with the pull command:
cd $LJHOME
git pull dreamwidth develop:develop
git pull dreamwidth master:master
  • To push the changes to your GitHub account you need to add this:
git push origin develop
git push origin master
  • For the nonfree part of the code, the commands are exactly the same except the one to go to the correct directory:
cd $LJHOME/ext/dw-nonfree
  • You can also create a script to make it simpler. See this article.
N.B. to create a new file on WinSCP, right click into the correct folder (/bin here) then click on New/File.


Updating your database

  • We're already seen this once but here it is again:
$LJHOME/bin/upgrading/update-db.pl -r -p --innodb
$LJHOME/bin/upgrading/update-db.pl -r --cluster=all --innodb
$LJHOME/bin/upgrading/texttool.pl load
  • You can also create a script to make it simpler. See this article.


Making changes to the code

Find or file a bug

Some of these bugs won't appear to require 'minor' effort to you. It's normal. Try to find small bugs among them: minor modifications to be done on one of the site pages (text to be modified; elements to be added, removed or moved; elements to be hidden from some categories of users, etc.).
  • To assign a bug to yourself, enter your Bugzilla e-mail address in Assign To and set the status to IN_PROGRESS.
To make this easier, you can also use of [info]fu's Greasemonkey scripts: Dreamwidth Bug Grabber. Click on (grab!) next to Assign To and this will edit it and Status for you. Click on Save Changes of course.


Create a branch

  • You're going to create a new branch on your own copy of the Dreamwidth repository specifically dedicated to the bug you want to work on. Use the bug number and a short description in the name, like so:
git branch bug###/xxx
  • To switch to this branch, use the checkout command and the name of your branch:
git checkout bug###/xxx
  • And that's it. Now you can start coding!


Edit files

  • Use WinSCP to open the file(s) you need to edit.
  • Remember that the free part of the code is in ~/dw/* while the non-free part is in ~/dw/ext/dw-nonfree/*.
  • If you're working on site pages, you're working on .bml files. These are in ~dw/htdocs/ or one of the subsequent folders. You'll see that their names correspond to the URLs of site pages. These files may use .pm modules/widgets which are in ~dw/cgi-bin/DW/ or ~dw/LJ/.
  • For text strings which are not in ~dw/htdocs/xxx.bml.text files, see ~dw/bin/upgrading/en.dat.
  • For more specific searches, you can use the grep command: grep [option(s)] pattern [file(s)]

Interesting options:

-E: match using extended regular expressions -F: match using fixed strings -r: recursive -i: case insensitive -l: filename only -n: add relative line number

Examples:

grep -ri "find this text" * | more
This will search for "find this text" in all files.
grep -ri "find this text" * | more
This will search for "find this text" in all files but only display the relevant filenames and not any excerpts.
grep -rl print_entry $LJHOME/bin/upgrading/s2layers
This will search for files containing "print_entry" in the /s2layers folder, and only display the filenames are results.


Test Your Changes on Your Dreamhack

  • In PuTTY, stop your Dreamhack:
stop-apache
  • Update your databas using this or the dwdb you created:
$LJHOME/bin/upgrading/update-db.pl -r -p --innodb
$LJHOME/bin/upgrading/update-db.pl -r --cluster=all --innodb
$LJHOME/bin/upgrading/texttool.pl load
  • Start your Dreamhack again:
start-apache
  • Go to your Dreamhack and test. Edit the files again in WinSCP if more changes are needed. Go through these steps again to test your new changes.


Request your changes to be pulled into Dreamwidth

Commit your changes

  • Use the commit command:
git commit
  • This will also open the nano editor so that you can type a commit message. Mention the bug number again and explain (quite briefly) what your changes do.


Push the changes to your GitHub fork

  • Use the push command and the branch name to push your changes to GitHub:
git push origin bug###/xxx


Request your changes to be pulled into the main code

  • On your GitHub page, click on the correct repository (dw-free or dw-nonfree), select the correct branch in the branch drop-down menu (this is below 'Clone in Windows') then click on Pull Request (it's at the top).


Note the pull request on Bugzilla

  • On your hard drive, create a simple text file indicating your patch is on GitHub (use a generic file).
  • Click on 'Add an Attachment' to attach your text file. Add a link to your pull request in the description, check and set Flags/Commit and Flags/Review to ?. Feel free to add questions or remarks. Click on Submit.
  • Wait for someone to review and commit your patch. You're done. :)


More: stashing your changes

FIXME


More: deleting a branch

FIXME


More: troubleshooting tips

Issues with text strings

  • As [info]denise explained here, you need to delete old text strings and create new ones when you edit .text files or en.dat instead of simply editing the text. If the change isn't critical - the string doesn't need to be renamed or the text change is minor - it's better to notify the site copy team so that text can be changed locally and the original file left alone.
  • If text you've modified doesn't appear on the site after a code push, append ?uselang=debug to the page URL to make sure it's using the right string. If it is and it still doesn't display after a while, comment on [info]dw_maintenance.

Starting over

  • Delete your copies of the Dreamwidth repositories:

FIXME


References

  • [Moving_your_Dreamwidth_installation_to_use_Github|Moving to GitHub]
  • [Dev_Maintenance|Development Maintenance]
  • [Draft:_Github_development_process|Github Development Process]
  • Bash commands
  • [Git_Getting_Started|Git: Getting Started]
  • Learn.GitHub