The Complete Dev. Startup Organization Setup with GitHub
Tags: github, beginners, startup, webdev
Published: 2020-05-17 12:28:39

I found complete startups organization management solution with GitHub. As a startup Software development & technology team, we need to consider lots of things like project source code management, do teamwork, teams and build packages maintainability. In here we can configure everything in the same place. Finally, last but not last everything is free. 😇


## 🔰 1. Open an Organization

Open this Url [https://github.com/organizations/plan](https://github.com/organizations/plan) . Pick a Plan that suitable for the organization. Here we choose a free plan.

Choose Plan: 
![alt text](https://dev-to-uploads.s3.amazonaws.com/i/d3iaefd8u66xiir88eu6.png "Choose Plan")

Free Plan Registration Page: 
![alt text](https://dev-to-uploads.s3.amazonaws.com/i/c7u9dddug9xhtjs4t36g.png "Registration Page")

In here nothing complex just put organizational information like what will be organizational account name, contact email address and finally organizational type.

>Note: Don't worry the information will be changeable in future.

After hit next we are able to get a welcome page like below, we don't need to invite everyone now, we can add them later to do so hit `Skip the step`.


Welcome and Users Invitation Page: 
![alt text](https://dev-to-uploads.s3.amazonaws.com/i/ftwm8b3oqkjbyq4rqqrb.png "Invitation Page")


Congratulation Here, we have a homepage of our organization. we need to configure a couple of things we will make it later.

Welcome and Home Page: 
![alt text](https://dev-to-uploads.s3.amazonaws.com/i/yjppfu0o374wqsi2waqe.png "Home Page")

## 🔰 2. Organization Settings

Select the `Settings` tab and we have setting information. We can update easily require information. That information is related to the organization. So filling that information we can globally tell about an organization. It is pretty simple to configure.

Here is Setting page: 
![alt text](https://dev-to-uploads.s3.amazonaws.com/i/4xsfhxjzpez4d9e9dffi.png "Setting Page")

## 🔰 3. Projects Management

Now choose the `Projects tab`. This is a great window where we can find out which projects are going on about their metrics and more about project backlog related stuff.

Here is Project page: 
![alt text](https://dev-to-uploads.s3.amazonaws.com/i/z6ngz3xc1bc64j237hie.png "Project Page")


## 🔰 4. Teams Management

Now choose `Teams Tab`. In this simple window, we are able to control different teams. We can create invite our team members. we can also discuss and collaborate in an individual team or Whole organization. It's is cool stuff?. Team communication and collaboration is easy.

Here is our teams page: 
![alt text](https://dev-to-uploads.s3.amazonaws.com/i/mj1wd42u58fwnjyr9pzu.png "Teams Page")


## 🔰 5. People Management - Do Administrative Stuff.

Now choose `People Tab`. In this page all the people are visible, We can do the administrative task from here. Here we can change and permit user ownership and roles So that we can do the different level of organizational administrative job.  

Here is peoples management page: 
![alt text](https://dev-to-uploads.s3.amazonaws.com/i/6xurhdef5km209u18lxq.png "People Managment")


## 🔰 6. Packages Management

Now choose `Packages Management`. Github came with great feature. Now we can easily manage packages, binaries and build we can easily upload our common reusable packages and use them into projects. Not need to go for an external solution. Now Everything in on the same place.

> Note: It has some pricing related issue, so check before using it.

Here is package management page: 
![alt text](https://dev-to-uploads.s3.amazonaws.com/i/cgoprh7269t2922v4awi.png "Package Management")


## 🔰 7. Create a New Repository

Hit `Create Repository`. As like as GitHub personal user account, Now we can create a personal organizational repository, It can be `Public/Private`.

Here is - Package Management Page: 
![alt text](https://dev-to-uploads.s3.amazonaws.com/i/7l1dc879t4z0uk10ktiy.png "How to create Github Organization")

Here is - New Repository Creation Page:
![alt text](https://dev-to-uploads.s3.amazonaws.com/i/1uhbyfc19of2do2yi6cq.png "Rep Creation Page")

## 🔰 8. How to Publish Project Source Code

This is an `Empty Repository Page`. We can follow their guidelines, But before doing that we need to set up [Git client](https://git-scm.com/downloads) So that we can execute those commands. Else if we have an existing project already then we can just simply upload it using drag and drop by selecting `upload and existing file` blue link. But the command line is recommended and very convenient to do this. Once we are hands-on by dirty our hand, it will be really fun.

Here is - Empty Repository Page: 
![alt text](https://dev-to-uploads.s3.amazonaws.com/i/wt06ia4mka61bn1rmuy6.png "Empty Repo Page")


https://dev-to-uploads.s3.amazonaws.com/i/1y0r0ms765y1d9kg5ydl.png

## 🔰 9. Learn More about Git & Commands

### 📗 First Time Git Configuration

Before you can start using Git, you need to configure it. Run each of the following lines on the command line to make sure everything is set up.

🕹 Sets up Git with your name

    git config --global user.name "<Your-Full-Name>"

🕹 Sets up Git with your email

    git config --global user.email "<your-email-address>"


### 📗 The seven rules of a great Git commit message

Keep in mind: This has all been said before.

- Separate subject from the body with a blank line
- Limit the subject line to 50 characters
- Capitalize the subject line
- Do not end the subject line with a period
- Use the imperative mood in the subject line
- Wrap the body at 72 characters
- Use the body to explain what and why vs. how


For example:

```
Summarize changes in around 50 characters or less

More detailed explanatory text, if necessary. Wrap it to about 72
characters or so. In some contexts, the first line is treated as the
subject of the commit and the rest of the text as the body. The
blank line separating the summary from the body is critical (unless
you omit the body entirely); various tools like `log`, `shortlog`
and `rebase` can get confused if you run the two together.

Explain the problem that this commit is solving. Focus on why you
are making this change as opposed to how (the code explains that).
Are there side effects or other unintuitive consequences of this
change? Here's the place to explain them.

Further paragraphs come after blank lines.

 - Bullet points are okay, too

 - Typically a hyphen or asterisk is used for the bullet, preceded
   by a single space, with blank lines in between, but conventions
   vary here

If you use an issue tracker, put references to them at the bottom,
like this:

Resolves: #123
See also: #456, #789
```

> `Note:` we can add multiple line commit using `git commit` command 

### 📗 Branching, Merging and Tagging

The git branch is a very important concept. It becomes really helpful when project co-workers are frequently working on new features development. Also, It makes the project more maintainable & integrable. If we want to contribute on any Open Source project then we need branch.

The `git branch` command is used to interact with Git's branches:

    git branch

It can be used to:

- list all branch names in the repository
- create new branches
- delete branches

🕹 Create Branch

    git branch latest
    git branch footer-fix


🕹 Switch Back and forth to different Branch.
To navigate into different branches using `git checkout`

     git checkout footer-fix
     git checkout -b header-fix

>Note: `git checkout -b header-fix` create a new branch and make it `Active Branch` in the code editor.

🕹 Delete Branch

    git branch -d footer-fix

🕹 See All Branches At Once

    git log --oneline --decorate --graph --all

🕹 Undo from selected Branch

    # undo once, from commits
    git reset --hard HEAD^
    git reset --hard master^
    
    git reset --hard HEAD^

    # undo twice, from commits
    git reset --hard HEAD^^

🕹 Merge into different Branch

    git merge <name-of-branch-to-merge-in-[Eg.footer-fix]>

Note: `Active branch merge with given <name-of-branch-to-merge-in>`

🕹 Syncs all the available remote branches

    git fetch


🕹 Push update or changes using

    git push origin master
    git push origin footer-fix


### 📗 Merge Conflict

When multiple teams and peoples are working on a single file or branch at the same time then merging conflict occurs. To avoid these types of occurrence, we need to avoid working on the same file & branch at the same time.

🕹 Merge Conflict Indicators Explanation
The editor has the following merge conflict indicators:

- `<<<<<<< HEAD` everything below this line (until the next indicator) shows you `what's on the current branch`


- `||||||| merged common ancestors` everything below this line (until the next indicator) shows you `what the original lines were`

- `=======` is the end of the original lines, everything that follows (until the next indicator) is `what's on the branch that's being merged in`

- `>>>>>>>` heading-update is the ending indicator of `what's on the branch that's being merged` in (in this case, the heading-update branch)


🕹 Resolving A Merge Conflict

Git is using the merge conflict indicators to show you what lines caused the merge conflict on the two different branches as well as what the original line used to have. So to resolve a merge conflict, you need to:

- choose which line(s) to keep
- remove all lines with indicators

> Notes: finally make new commit after resolve it manually.



### 📗 Undoing Changes

🕹 Git reset or revert local changes until commit 

    $ git checkout .

🕹 Changing The Last Commit

With the `--amend` flag, you can alter the most-recent commit.
like, Add Forgotten Files To Commit

    git commit --amend

### 📗 The git revert Command
Now that I've made a commit with some changes, I can revert it with the git revert command

    git log
    git revert <SHA-of-commit-id-to-revert>

This command:

- `SHA-of-commit-id-to-revert` will be founded by `git log`
- will undo the changes that were made by the provided commit
- creates a new commit to record the change

🕹 Change remote origin

    $ git remote set-url origin https://github.com/mesadhan/sample-app.git
    
🕹 Remote origin status

    $ git remote -v


### 📗 Relative Commit References for Back and forth 

Sometimes we back

- `^` – indicates the parent commit
- `~` – indicates the first parent commit

Here's how we can refer to previous commits:

The parent commit – the following indicate the parent commit of the current commit

- HEAD^
- HEAD~
- HEAD~1

The grandparent commit – the following indicate the grandparent commit of the current commit
- HEAD^^
- HEAD~2

The great-grandparent commit – the following indicate the great-grandparent commit of the current commit

- HEAD^^^
- HEAD~3


### 📗 Remove Local and Remote Commit 

To view commits history base on the number hit below command,

    $ git rebase -i HEAD~2

Now Remove those commit from the list and save.

> Optional, You can pull, if you want to sync with the latest work then below command,

    $ git pull

Otherwise, permanently change your local and remote repository using below command,

    $ git push origin master

`Note:` Here, `git rebase -i HEAD~2`, will show last two commits. we can change the number for more commit history.


### 📗 Git Tag Command

Git tag uses usually when we release a version for a product. It is important to know how we can tag annotations,

🕹 add a tag with annotation and version

    git tag -a v1.0
    git tag -a beta

`Sample Tag Commit message`

```
Put Headline About Tag
#
# Write a message for tag:
#   v1.0
# Lines starting with `#` will be ignored 
```

`CAREFUL:` In the command above (git tag -a v1.0) the -a flag is used. This flag tells Git to create an annotated flag. If you don't provide the flag (i.e. git tag v1.0) then it'll create what's called a lightweight tag.


Annotated tags are recommended because they include a lot of extra information such as:

- the person who made the tag
- the date the tag was made
- a message for the tag

Because of this, you should always use annotated tags.


🕹 Verify Tag & Tag History

After saving and quitting the editor, nothing is displayed on the command line. So how do we know that a tag was actually added to the project? If you type out just git tag, it will display all tags that are in the repository.

    git tag
    git log --decorate


🕹 Deleting A Tag

    git tag -d v1.0
    git tag --delete v1.0


👌 Thanks for your time & passion. Feel free to ask me anything.
If you have any issues & queries. [Follow me on Twitter ](https://twitter.com/eng_sadhan)

## 🔰 References:-

- https://github.com/pricing
- https://github.com/organizations/plan
- https://git-scm.com/downloads
- https://github.blog/2020-04-14-github-is-now-free-for-teams/