<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Basement Developers</title>
    <description>The latest articles on DEV Community by Basement Developers (@basementdevs).</description>
    <link>https://dev.to/basementdevs</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F8357%2F7f9488ac-1969-477c-be09-1f36cd61420d.png</url>
      <title>DEV Community: Basement Developers</title>
      <link>https://dev.to/basementdevs</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/basementdevs"/>
    <language>en</language>
    <item>
      <title>Database for newbies: Hands On</title>
      <dc:creator>Fernanda Fernandes </dc:creator>
      <pubDate>Tue, 26 Mar 2024 18:00:00 +0000</pubDate>
      <link>https://dev.to/basementdevs/database-for-newbies-3a9f</link>
      <guid>https://dev.to/basementdevs/database-for-newbies-3a9f</guid>
      <description>&lt;p&gt;Knowing how to deal with databases are &lt;strong&gt;really&lt;/strong&gt; important for every developer, so I will guide you through a tutorial on how to create one using MySQL on the terminal. &lt;/p&gt;

&lt;p&gt;If you are a little bit lost when it comes to databases, I highly recommend you my first article of this series, where I explain the theory about databases. For now, lets get to the pratical part! &lt;/p&gt;

&lt;h2&gt;
  
  
  Table of contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Hands on!&lt;/li&gt;
&lt;li&gt;Preparing the environent&lt;/li&gt;
&lt;li&gt;
Creating our first database

&lt;ul&gt;
&lt;li&gt;Datatypes and properties&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
CRUD

&lt;ul&gt;
&lt;li&gt;Create&lt;/li&gt;
&lt;li&gt;Read&lt;/li&gt;
&lt;li&gt;Update&lt;/li&gt;
&lt;li&gt;Delete&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Hands on!
&lt;/h2&gt;

&lt;p&gt;There are many ways of creating a database, but I usually do it using MySQL on the terminal and DBeaver to visualize them when I need it. I decided to approach only MySQL on the terminal, specially because it is pretty simple to learn and very important to know the basics.  Maybe one day I can show how DBeaver works. For now, I will show you how to deal with database through terminal, but remember - there are different ways of doing it. &lt;/p&gt;

&lt;h2&gt;
  
  
  Preparing the environment
&lt;/h2&gt;

&lt;p&gt;First of all, you will have to install MySQL. I recommend you to install the MySQL Installer, which will have a lot of softwares to be downloaded, such as MySQL Workbench, MySQL Shell and many others. You should be able to download it on this link &lt;a href="https://dev.mysql.com/downloads/installer/"&gt;MySQL Installer&lt;/a&gt; and run the program. Then you should install MySQL Server, MySQL Workbench and MySQL Shell. &lt;/p&gt;

&lt;p&gt;If you use other operational system than windows, or is having some issues you can ask me or try to take a look on some videos or articles more focused on the step-to-step installation. &lt;/p&gt;

&lt;p&gt;After doing it, you will have to define the windows variable system. You should go on System's propriety&amp;gt;Advanced and then Environment variables&lt;/p&gt;

&lt;p&gt;Find the system variable called "Path" and double click it. Then you should click on "New" and copy the MySQL server's path on it. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbiq7t02a6hqk3t4r3plk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbiq7t02a6hqk3t4r3plk.png" alt="SQL path variable" width="363" height="23"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To test if it is working, open the terminal ( command prompt ) and type&lt;code&gt;mysql&lt;/code&gt;. If an error saying that you have no access shows up, try te command &lt;code&gt;mysql -h localhost  -u root -p&lt;/code&gt;. It will ask the password and it will connect on MySQL. &lt;/p&gt;

&lt;h2&gt;
  
  
  Creating our first database
&lt;/h2&gt;

&lt;p&gt;Now that we had set up our environment, we can work on the database! First of all, since we are going to do it using the terminal, you will have to open it and then connect on MySQL, which can be done with &lt;code&gt;mysql&lt;/code&gt; command or &lt;code&gt;mysql -h localhost  -u root -p&lt;/code&gt;.  You should be able to see something similar to the picture below.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Important&lt;/strong&gt;: every MySQL command must finish with ";", and it is a good practice to write it on capital letters. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxre2jtfzshx6hojr2y5n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxre2jtfzshx6hojr2y5n.png" alt="SQL connection on terminal" width="729" height="321"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After that, it is important to acknowledge some important database commands, such as: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;CREATE DATABASE &amp;lt;database-name&amp;gt;;&lt;/code&gt; : creates the database with the name specified on "database-name";&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;SHOW DATABASES;&lt;/code&gt; : shows the databases created; &lt;/li&gt;
&lt;li&gt;
&lt;code&gt;DROP DATABASE &amp;lt;database-name&amp;gt;&lt;/code&gt; : delete the database informed and its values;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;USE &amp;lt;database-name&amp;gt;&lt;/code&gt;: to select the database and be able to work on it. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now the idea is to create a database named "store" and then a table named "products", which will have the fields id (the primary key), name, price and quantity.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcrj1svxw2yux135xi1og.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcrj1svxw2yux135xi1og.png" alt="Products table" width="220" height="158"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To create this database we will use the command on the terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CREATE DATABASE store; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After creating it, we will create the table named "products". We must select and enter the database first and then create the table with its fields, which will be id, name, price and quantity.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;USE store; //Selecting the database
CREATE TABLE products
    ( id int auto_increment primary key,
      name varchar(40) NOT NULL, 
      price double(10,2) NOT NULL,
      quantity int NOT NULL
    );  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ok, now we have our database and our first table created! To visualize it we can use &lt;code&gt;SHOW DATABASES;&lt;/code&gt; or &lt;code&gt;SHOW TABLES;&lt;/code&gt; to see the tables created. We can also use &lt;code&gt;DESCRIBE products;&lt;/code&gt; if we want to see the table's description.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F345ws57g8fmvpf1leejw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F345ws57g8fmvpf1leejw.png" alt="Description of products table on the terminal" width="664" height="206"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Datatypes and Properties
&lt;/h3&gt;

&lt;p&gt;Every time we create a table, we have to define the type of our data and some properties like if it is a primary key, a foreign key, if the data can be null, if it is unique... There are many properties and datatypes so We can use what will fit us the best. &lt;/p&gt;

&lt;p&gt;One of the most common datatypes are: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Int&lt;/strong&gt; : used for integer numbers, allows 4 bytes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Double&lt;/strong&gt;: float number with double precision&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Decimal(p,s)&lt;/strong&gt; :  used to store decimal numbers. "p" defines how many numbers will be allowed on the left side of the comma. "s" defines how many will be allowed on the right side of the comma. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Date&lt;/strong&gt; : stores a date, which can be from 01/01/0001 to 12/31/9999.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Timestamp&lt;/strong&gt; : stores an unique number that will be updated every time a table line is updated or created. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Varchar(n)&lt;/strong&gt; : stores characters. "n" shows that we can define the amount of characters we are expecting to receive. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The properties are really important for our database, it will gives us more details. One of the most common ones are: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Not null&lt;/strong&gt; : when applied to the data, means it can not be null, so it has to be given an value. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auto_increment&lt;/strong&gt;: mostly applied to primary keys, allows automatic generation of unique numerical values for a columns. Very used to create unique indentifiers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Primary key&lt;/strong&gt;: property used to define the data as primary key of the table
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Foreign key&lt;/strong&gt; :  property used to define the data as foreign key of the table, creating a relationship between tables. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  CRUD
&lt;/h2&gt;

&lt;p&gt;After learning all of this about database, we can finally get to create a CRUD on the database. CRUD means create, read, update and delete, and it is really important for every developer, especially the back-end ones, to know how to do it. &lt;/p&gt;

&lt;p&gt;In real life, CRUD is made using a programming language to get the data sent and store on the database. However, you need to know the SQL commands used to manipulate a database because even though you are going to use PHP, Java, Node or Python to do it, you probably will have to use the same SQL commands. After this article I will write another one creating a PHP application to show you how it works!&lt;/p&gt;

&lt;p&gt;I highly recommend that you do these steps on your terminal to see how MySQL works! And, of course, feel free to try new things.&lt;/p&gt;

&lt;h3&gt;
  
  
  Create
&lt;/h3&gt;

&lt;p&gt;To create or insert a data on our table we use the command &lt;code&gt;INSERT INTO&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;INSERT INTO products VALUES (null, 'Rice', 5, 10); //One way of doing it 
INSERT INTO products (name, price, quantity) VALUES ('Rice', 5, 10); //Another way of inserting data 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the first option is important to understand that the values informed must be at the same sequence of the table (id, name, price and quantity). The id can be null because it is an auto_increment data. And in the second option we inform which datas will be given. Also every time we insert a string, we have to use quotes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Read
&lt;/h3&gt;

&lt;p&gt;To read information of a table we use the command &lt;code&gt;SELECT&lt;/code&gt; . There is some ways of selecting information.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT * FROM products; //Example 1
SELECT * FROM products WHERE id = 1; //Example 2  
SELECT (name) FROM products WHERE quantity&amp;lt;5; //Example 3 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;We use ' * ' to say that we want to read all the fields - or columns - of the table, just like example 1. If we do not want it, we can inform which ones we want, like example 3.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;We use the clause " WHERE " to filter the information we want to return. For example if we wanted to know which product holds the id equals to number 1, we would use the example 2. It is also possible to use the 'where' to return the products that has less than 5 quantities, just as in example 3. &lt;strong&gt;Except for specific situations, we shouldn't do queries without "WHERE"&lt;/strong&gt;. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Update
&lt;/h3&gt;

&lt;p&gt;Is pretty usual to update the data registered, and we use the command &lt;code&gt;UPDATE&lt;/code&gt; to do it. We can change the price of a product, for example, and we will use the "WHERE" in here too.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;UPDATE products SET price=8, quantity=3 WHERE id=1;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example we are updating the product's price and quantity. Note that the WHERE is really important to define which register will be updated. &lt;/p&gt;

&lt;h3&gt;
  
  
  Delete
&lt;/h3&gt;

&lt;p&gt;The delete operation, as you imagine, delete some register. The WHERE is &lt;strong&gt;really&lt;/strong&gt; important in this type of query since if you do not use it, you will delete all the data from the table. So remember: &lt;strong&gt;Always use WHERE!&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DELETE FROM products WHERE id=2; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  And that's it!
&lt;/h2&gt;

&lt;p&gt;I hope you've learned how to create a database and how to do CRUD operations on it! Remember that there are different ways of doing it, so feel free to research more about it.&lt;/p&gt;

&lt;p&gt;If you have any questions you can send me a message! This content was created with my notes during the 100 days of code, in which I learned about database, PHP and Laravel. &lt;/p&gt;

&lt;p&gt;And thanks to the people that reviewed my article and helped me to get here: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a class="mentioned-user" href="https://dev.to/danielhe4rt"&gt;@danielhe4rt&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;
&lt;a class="mentioned-user" href="https://dev.to/cherryramatis"&gt;@cherryramatis&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;
&lt;a class="mentioned-user" href="https://dev.to/reenatoteixeira"&gt;@reenatoteixeira&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>database</category>
      <category>tutorial</category>
      <category>beginners</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>Database for newbies: Theorethical Approach</title>
      <dc:creator>Fernanda Fernandes </dc:creator>
      <pubDate>Wed, 20 Mar 2024 19:28:31 +0000</pubDate>
      <link>https://dev.to/basementdevs/database-for-newbies-n46</link>
      <guid>https://dev.to/basementdevs/database-for-newbies-n46</guid>
      <description>&lt;p&gt;Either if you have &lt;strong&gt;just started&lt;/strong&gt; learning programming or if you &lt;strong&gt;already have&lt;/strong&gt; some experience with it, I'm pretty sure you already asked yourself (or others) what a database really is, how you can deal with it, what is the difference between relational and non relational databases and what they are used for. &lt;/p&gt;

&lt;p&gt;When it comes to programming, feels like our doubts are endless and sometimes we can feel lost in this sea of information. I will talk about some concepts that every beginner should know to create its first database. I hope to teach you at least something about database, one of the most important parts of the softwares. &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Table of contents&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
What is database? &lt;/li&gt;
&lt;li&gt;
Types of database 

&lt;ul&gt;
&lt;li&gt;
Relational &lt;/li&gt;
&lt;li&gt;Non-Relational&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;What is SQL?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What is database?
&lt;/h2&gt;

&lt;p&gt;Before everything, it's important to understand what is &lt;strong&gt;data&lt;/strong&gt;. Well, it is a value, like 21. But this data won't have a meaning unless we organize it, creating an information. For example, this number, all alone, could be an age, could be the total people that logged on your website or even your state number. Now if I say to you that we have the data:  &lt;code&gt;age = 21&lt;/code&gt; , we can pretty much understand that the value 21 is someone's age. That's what we call &lt;strong&gt;information&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Knowing that, I can tell you that database is a collection of organized information. I like to imagine that databases are similar the process of moving to a new home. For example, when we are moving, it is normal to pack our things inside boxes. We would have a box for books, one for clothes and another for electronics. And in the end, we put everything inside a truck and take it to our new home. &lt;/p&gt;

&lt;p&gt;In this example, our database would be the truck, because we have many boxes of specific things - a collection of organized information. This information is structured and normally stored in a computer system. (We use databases to store data, access and maintain it. )&lt;/p&gt;

&lt;p&gt;To control a database, we are going to use what we call as Database Management System (DBMS), softwares used to visualize the database's tables, its information, and where we can also run queries (commands to do actions on the database) and many other things. It's basically a interface between the user - the person using the database - and the database itself.&lt;/p&gt;

&lt;p&gt;We can say that every time we create, delete, update and read - and so much more - we will deal with a DBMS. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwmyuwc2x8ovlc5w376im.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwmyuwc2x8ovlc5w376im.jpg" alt="Image showing how a database management system works" width="800" height="599"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Examples of Database Management System: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MySQL &lt;/li&gt;
&lt;li&gt;SQL Server &lt;/li&gt;
&lt;li&gt;Oracle Database&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are so many options and we should choose the one that fit us and the project better. &lt;/p&gt;

&lt;h2&gt;
  
  
  Types of database
&lt;/h2&gt;

&lt;p&gt;The most important types of database, the ones every beginner should know are: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Relational Database&lt;/li&gt;
&lt;li&gt;Non-relational Database &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Relational
&lt;/h3&gt;

&lt;p&gt;This type of database is structured using tables with columns and rows, like the image below, and we use SQL to deal with this structure. &lt;br&gt;
In a table, we will have: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Columns, which defines what every piece of data is (ID, Name, Age...) and its type;&lt;/li&gt;
&lt;li&gt;Row, which holds the data given. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff4qx9y567xoz1kasayqc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff4qx9y567xoz1kasayqc.png" alt="Student database table" width="620" height="361"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Every row in the table is a record with an exclusive ID, which we call as a &lt;strong&gt;key&lt;/strong&gt;. In this table, for example, the key would be the numbers 1, 2, 3... We can see that every record has its own key, used to identify itself.&lt;/p&gt;

&lt;p&gt;We have at least three types of keys that every beginner should acknowledge: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Key&lt;/strong&gt; : it is basically one or more columns in a table that will be responsible for identifying in an exclusive way the rows.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Primary Key&lt;/strong&gt; : this type will ensure &lt;strong&gt;uniqueness&lt;/strong&gt; to the register, will refer the register on a relationship between tables and it is &lt;strong&gt;indexed&lt;/strong&gt;, which increases the efficiency of our DBMS. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Foreign Key&lt;/strong&gt; : it is a column that will kind of connect the tables using the primary key of each of them. We use this type of key to create relationships between tables. It is important to understand that the table that has the foreign key is called &lt;strong&gt;reference table&lt;/strong&gt; and the one that is being referred is called &lt;strong&gt;referenced table&lt;/strong&gt; or &lt;strong&gt;father table&lt;/strong&gt;. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Non relational
&lt;/h3&gt;

&lt;p&gt;Non relational database, also called as NoSQL (Not Only SQL, nowadays), are a type of database that don't use the table, and its columns and rows, as an organization scheme. It offers more flexibility because you won't have to worry about creating a table as we have to do on relational databases. &lt;/p&gt;

&lt;p&gt;The storage on NoSQL is optimized and it adapts itself to fit every need. For example, it is possible to storage data as key/value, as JSON documents or as graphics. &lt;/p&gt;

&lt;p&gt;NoSQL databases were created to solve the problem people were suffering until the late 90's, which was the difficulty to design databases that could cope with the scale and agility needed using the relational database, that wasn't able to do it at that time. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3f8ox9vms8ld9ebo1vpv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3f8ox9vms8ld9ebo1vpv.png" alt="SQL vs NoSQL" width="567" height="347"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One of the most important features of NoSQL is: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Higher scalability&lt;/li&gt;
&lt;li&gt;No complex relationship &lt;/li&gt;
&lt;li&gt;Reduced costs &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Non relational databases also have types, and two of them are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Key Value&lt;/strong&gt;: the most common one. Every item on the database will be stored as an attribute name (or 'key') with its value. For example: &lt;code&gt;{"name": "Maria"}&lt;/code&gt;. The key is "name" and the value is "Maria". The most used databases in these cases are &lt;strong&gt;Redis&lt;/strong&gt;, &lt;strong&gt;DynamoDB&lt;/strong&gt; and &lt;strong&gt;Berkeley DB&lt;/strong&gt;. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Document&lt;/strong&gt;: stores each key with its document, and its principal feature is having all the information inside one document. This document normally is a JSON but it can also be a XML, for example. The most famous document database is MongoDB&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are a lot more information about this type of databases but this is the basics you have to know to start! Besides that, don't let this beginning stop you from digging deeper to learn more. &lt;/p&gt;

&lt;h2&gt;
  
  
  What is SQL?
&lt;/h2&gt;

&lt;p&gt;SQL stands for &lt;strong&gt;Structured Query Language&lt;/strong&gt;, a programming language used to work with databases created on the labs of IBM around the 70's. After a while, it became a pattern when it comes to data management. &lt;/p&gt;

&lt;p&gt;We use this programming language to run queries on the database and we can retrieve, create or delete information from the database using the most various parameters. We just have to follow the syntax, just like any other programming language. &lt;/p&gt;

&lt;p&gt;SQL has many &lt;strong&gt;commands&lt;/strong&gt; but the most important ones are: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SELECT&lt;/strong&gt;: search rows on the database table.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;INSERT&lt;/strong&gt;: insert new rows on the table.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;UPDATE&lt;/strong&gt;: used to update the data that already exists on the table.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DELETE&lt;/strong&gt;: delete a register.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is important to say that we use this commands with other parameters so we can make the queries very specific. And it is a convention to use SQL on Capslock. &lt;/p&gt;

&lt;p&gt;SQL also has some conditions that we can add on our query in order to modify the registers that will be returned, like: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;FROM&lt;/strong&gt;: used to say what table will be consulted. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ORDER BY&lt;/strong&gt;: used to organize the data returned in a specific order.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WHERE&lt;/strong&gt;: used to &lt;strong&gt;specify the conditions&lt;/strong&gt; of the data to be return. For example, if we want to see the users we have on our table that are older than 18 years old, we would use the 'where'. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are many other commands in SQL but this is the very basic we need to know to create our first table and learn the commands to create our first CRUD, which stands for Create, Read, Update and Delete. &lt;/p&gt;

&lt;h2&gt;
  
  
  And that's it!
&lt;/h2&gt;

&lt;p&gt;Through this article we learned the basics of database, like what it is, it's types and what is SQL. Now, we must learn how to create one, topic covered on the next article of this series. &lt;/p&gt;

&lt;p&gt;This content was created based on my notes during the 100 days of code, in which I learned about database, PHP and Laravel, so I am really proud of it, since I knew almost nothing about it before starting the challenge. Also, feel free to ask me questions if needed!&lt;/p&gt;

&lt;p&gt;And thanks to the people that reviewed my article and helped me to get here: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a class="mentioned-user" href="https://dev.to/danielhe4rt"&gt;@danielhe4rt&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;
&lt;a class="mentioned-user" href="https://dev.to/cherryramatis"&gt;@cherryramatis&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;
&lt;a class="mentioned-user" href="https://dev.to/reenatoteixeira"&gt;@reenatoteixeira&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>database</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Protocols and how they work</title>
      <dc:creator>Nicolas Evangelista </dc:creator>
      <pubDate>Tue, 05 Mar 2024 14:15:14 +0000</pubDate>
      <link>https://dev.to/basementdevs/protocols-and-how-they-work-46cd</link>
      <guid>https://dev.to/basementdevs/protocols-and-how-they-work-46cd</guid>
      <description>&lt;p&gt;&lt;strong&gt;Disclaimer: This is an introductory article made by someone who's studying this subject, if you have some advice about the topics that are covered in here, DM me! We can have a chat and i'll be pleased to change this article. Thanks for reading!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After my last article about deploys and how they work (only an introduction about that topic), i started to study more about network and how we can connect our devices with another devices, and exchange data between them, of course.&lt;/p&gt;

&lt;p&gt;I intend to do a series (don't know how many articles it will be) of articles about protocols and how they work individually, by the end of the series you might have a good understanding about how the internet works with all of these protocols working together, making a deploy look like child's play.&lt;/p&gt;

&lt;p&gt;For this matter i'll be using the two most used models, the TCP/IP and OSI model, as both of them can be used as reference models, it'll help us understand the data flow within any type of network. &lt;/p&gt;

&lt;p&gt;I've already knew OSI model from previous studies but it wasn't something that caught my attention, even TCP/IP, which is the backbone of our network communication didn't grab my attention, until now. Thus, i have decided to make some articles about some protocols that we already know, but showing - or trying to - how things work within the OSI and TCP/IP model.&lt;/p&gt;

&lt;h2&gt;
  
  
  OSI and TCP/IP stack
&lt;/h2&gt;

&lt;p&gt;Both models are structured with layers, the OSI has 7 layers that correlates with the 4 layers of TCP/IP model, because both of them can be used as reference models. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flnom5pewjtf4mfi51gqv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flnom5pewjtf4mfi51gqv.png" alt="OSI and TCP/IP models" width="800" height="565"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;First, let's go through what protocols actually do and why we call them a stack.&lt;/p&gt;

&lt;p&gt;Protocols are basically an agreement between two or more hosts to establish some standards for this communication to happen, the stack is created so we can have a reference for the multiple stages in this conversation, and troubleshoot any issues that might show up. We can say that a protocol stack is the one that contains all the protocols, or services, that are needed for hosts to communicate with each other.  &lt;/p&gt;

&lt;p&gt;Furthermore the stack also represents the isolation between layers, so each layer will communicate with the same layer in the other host and will pass through the same stages using the same protocols, the isolation between layers is used so that the upper layers don´t have to occupy themselves with some services that are being executed on the lower layers. &lt;/p&gt;

&lt;h2&gt;
  
  
  Ok, but what these layers actually do?
&lt;/h2&gt;

&lt;p&gt;The 1st layer of the stack is the physical layer and at this point i think that everyone knows how data is physically transmitted, doesn't matter what is the medium used, the computer will always see bits flowing.&lt;/p&gt;

&lt;p&gt;The 2nd layer is responsible for transforming the transmission received, break into smaller pieces making data frames (hundreds or thousands of bytes) and transmitting the frames sequentially, the receiver can send back an acknowledgement frame to confirm that he has received the data frame correctly.&lt;/p&gt;

&lt;p&gt;3rd layer might be the most famous one, it is the layer responsible for routing data through networks, besides that, it is responsible for dealing with congestion and the quality of the service offered by other layers, the network layer must assure that the correct protocols are being used. The data in this layer is called packets.&lt;/p&gt;

&lt;p&gt;4th layers is the most challenging for me, specially because it's here where the magic - or the isolation - happens, this layer is responsible for isolating the communication process between the upper and lower layers, therefore it needs to put everything in order, so it must reorder every data received and handle the communication with care. This is a layer that must establish a connection that aims directly to the other machine, so it is a "direct" connection between two hosts, because the lower layers will handle the communication between the host and the next immediate host, so it could be a router, a switch or an access point, but the 4th layer will handle the communication between the host and the final destination.&lt;/p&gt;

&lt;p&gt;The last 3 layers represents just 1 layer of the TCP/IP stack, and why is that? Well, that's an interesting topic, but we'll not deal with that right now, so let's keep moving. &lt;/p&gt;

&lt;p&gt;The session layer is mainly responsible for taking care of the session tokens, like keeping track of whose turn it is to transmit data, will also manage this tokens so the two parties won't even attempt to send data without the token, and last but not least, making sure that the data that has been transmitted is in order even if a crash occurs during the data transmission.   &lt;/p&gt;

&lt;p&gt;Almost reaching the peak of the model we have the presentation layer, this layer we can look at him more like a support role, because it will help the application layer to communicate with some services offered by the session layer, it is through this layer that the session layer knows which services it needs to provide to keep the data flowing. &lt;/p&gt;

&lt;p&gt;Last, but definitely not least, we have the application layer that have the duty of provide access to other services within the OSI model, it does that by using an interface that allows the end user to communicate with other services, all of the data generated with this input will be used by some other tools that will establish a connection with the layer below, then follow the process until it reach the other host.  &lt;/p&gt;

&lt;h2&gt;
  
  
  To be continued...
&lt;/h2&gt;

&lt;p&gt;This may sound confusing right now, but i'm sure that will help a lot with the understanding of the protocols that will be presented to you throughout your career as IT professional, because this layers can be seen by every communication process in a network, as i said at the beginning of this article, these are reference models, so it won't show you the answers about how an specific protocol work, but will definitely show you which rules the protocol has to follow to be part of some layer, or what functionalities some protocol have just for being part of any of these layers. &lt;/p&gt;

&lt;p&gt;The next article will treat the communication process within a LAN, which is a local area network, how the data flow works and the responsibilities for every component, it'll give a better understanding about how reference models can be applied to real scenarios. &lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;p&gt;Tanenbaum, Andrew S. Computer Networks. 5th ed. Upper Saddle River, NJ: Prentice Hall, 2010.&lt;/p&gt;

&lt;p&gt;Piscitello, David M., and Chapin, A. Lyman. Open Systems Networking: TCP/IP and OSI. Upper Saddle River, NJ: Addison-Wesley, 1993. &lt;/p&gt;

</description>
      <category>network</category>
      <category>beginners</category>
      <category>braziliandevs</category>
      <category>devops</category>
    </item>
    <item>
      <title>What we've achieved with 1 Month of Basement Devs</title>
      <dc:creator>Daniel Reis</dc:creator>
      <pubDate>Mon, 19 Feb 2024 15:29:22 +0000</pubDate>
      <link>https://dev.to/basementdevs/what-weve-achieved-with-1-month-of-basement-devs-3pec</link>
      <guid>https://dev.to/basementdevs/what-weve-achieved-with-1-month-of-basement-devs-3pec</guid>
      <description>&lt;p&gt;Running a community is a tough job, but after a few years of doing it, it becomes an easy task. This is the first month of our community and I want to show you what we have accomplished so far.&lt;/p&gt;

&lt;p&gt;If you're planning to run a community or even join one, this series will show you how to measure the health of the community using &lt;a href="https://discord.gg/basementdevs" rel="noopener noreferrer"&gt;Basement Developers&lt;/a&gt; as an example. &lt;/p&gt;

&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;1. General Achievements&lt;/li&gt;
&lt;li&gt;
2. Demographics

&lt;ul&gt;
&lt;li&gt;2.1 New Members&lt;/li&gt;
&lt;li&gt;2.2 Members Activation&lt;/li&gt;
&lt;li&gt;2.3 Member Visits &amp;amp; Comunicators&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;3. Events&lt;/li&gt;

&lt;li&gt;4. Partnerships&lt;/li&gt;

&lt;li&gt;5. Published Content&lt;/li&gt;

&lt;li&gt;6. What now?&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  1. General Achievements
&lt;/h2&gt;

&lt;p&gt;First of all, I'd like to thank a few readers who joined the community. Now we have a couple of Polish people who engage there on a daily basis. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;FYI: the community is looking for members like you, so join us ASAP! :D&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq0zly7fwr9rjijsuz832.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq0zly7fwr9rjijsuz832.jpg" alt="Weekly Meeting with a peak of 71 members" width="800" height="495"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;center&gt;Peak of 71 members in our latest weekly meeting.&lt;/center&gt;



&lt;p&gt;Since we started the community, our weekly meetings have been the place to discuss new opportunities, projects, and other opportunities down there, and to listen to what the members have to say.&lt;/p&gt;


  
  Your browser does not support the video tag.
 

&lt;p&gt;Speaking of community feedback, most of our members are Brazilians who want to get used to English, so the first project made in the community was an overlay to translate everything we say in our weekly meetings from English to Brazilian-Portuguese! Cheers to &lt;a href="https://github.com/Pantotone" rel="noopener noreferrer"&gt;Pantotone&lt;/a&gt;, the creator of this amazing tool!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyv2brtina8dtrd1ifqb0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyv2brtina8dtrd1ifqb0.png" alt="Github Organization" width="800" height="553"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Also, since we're starting to create projects, a new GitHub organization has been created to host all projects related to our community. Don't forget to &lt;a href="https://github.com/basementdevs" rel="noopener noreferrer"&gt;follow our community&lt;/a&gt; to get the latest project updates!&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Demographics
&lt;/h2&gt;

&lt;p&gt;When we talk about growth, we talk about numbers! Here's a recap from &lt;strong&gt;January 14 to February 12&lt;/strong&gt;. &lt;/p&gt;

&lt;h3&gt;
  
  
  2.1 New Members
&lt;/h3&gt;

&lt;p&gt;Since January 15th we have doubled the number of members! Currently we have 2197 active members on the server and many of them are practicing English every day in voice channels (in groups or one-on-one) and text channels of different styles.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw1dqorxb9zx3gl86iug7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw1dqorxb9zx3gl86iug7.png" alt="Chart with peak of 2k members" width="670" height="501"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2.2 Members Activation
&lt;/h3&gt;

&lt;p&gt;One of the metrics we'll be working on this month is the "activation" of a new member, which is when they understand what the community is about and why it's a good fit for them.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzmjkzxh5d2te1gzmbl1y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzmjkzxh5d2te1gzmbl1y.png" alt="Chart of new members interacting over the last month" width="800" height="305"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We did great in the first month and you can see the graph going straight to the bottom, but that's just because this last week we had &lt;strong&gt;Carnaval&lt;/strong&gt; here in Brazil, so it was expected and our Brazilian developers deserve this amazing event and a good vacation.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.3 Member Visits &amp;amp; Comunicators
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7xs7vtuw8fyd1h5ldfbq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7xs7vtuw8fyd1h5ldfbq.png" alt="Chart of member visits over the month" width="800" height="296"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Our average number of communicators or engagement is 8%. Our goal is to get to 15% by the end of March. How are we going to do that? I don't know yet, but with this list of weekly events, it should be a good bet.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Events
&lt;/h2&gt;

&lt;p&gt;Events are at the heart of our community, and last month, 16 pre-scheduled events were held, divided into 5 models:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Basement Meeting:&lt;/strong&gt; Our weekly meeting held every Tuesday at 07:00 PM BRT. Its purpose is to share the plans of our community, announce new partnerships, update members on news, and of course, practice English.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Practicing with Renato:&lt;/strong&gt; Every Wednesday, our community gathers to practice English with Renato. In this practice session, our members are given a topic, and each one engages in a conversation with Renato about it, always introducing new words to expand the community's vocabulary.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Traveling with JP:&lt;/strong&gt; In this session, our members will plan their dream trip together with JP, discussing costs, places to visit, local food, and much more! Come and plan your trip with us.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Practice with Leonardo:&lt;/strong&gt; Every Thursday morning, our community participates in an English practice session with Leonardo. Participants are assigned a topic and engage in conversation with Leonardo, incorporating new words to build vocabulary.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Coding Dojo:&lt;/strong&gt; In early February, we launched the Basement Coding Dojo, an event where community members take on roles in a development team during a simulated sprint. Our first Dojo Dev Team is made up of &lt;a href="https://github.com/gvieiragoulart" rel="noopener noreferrer"&gt;Gabriel&lt;/a&gt;, &lt;a href="https://github.com/Lorenalgm" rel="noopener noreferrer"&gt;Lorena&lt;/a&gt;, &lt;a href="https://github.com/lucas-pace" rel="noopener noreferrer"&gt;Lucas&lt;/a&gt;, &lt;a href="https://github.com/pedrovian4" rel="noopener noreferrer"&gt;Pedro&lt;/a&gt;, &lt;a href="https://github.com/reenatoteixeira" rel="noopener noreferrer"&gt;Renato&lt;/a&gt; and &lt;a href="https://github.com/yurastico" rel="noopener noreferrer"&gt;Yuri&lt;/a&gt;. Over the course of a month, the team aims to build a simple but complete application, working on design, backend and frontend, attending weekly meetings and interacting with an open-source project. You can find more information about this event in &lt;a href="https://github.com/basementdevs/english-coding-dojo" rel="noopener noreferrer"&gt;this repository&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  4. Partnerships
&lt;/h2&gt;

&lt;p&gt;Right now our biggest goal is to find HR companies or even companies that are actively recruiting developers. &lt;/p&gt;

&lt;p&gt;For this month, our goal is to build a demographic with more information about things that will be interesting to bring these opportunities to our members, e.g: Seniority, Stack and others. So far we have some results, but nothing that's meaningful yet, since it's a new approach on our side.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbxll9ud9we8y6uo1miry.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbxll9ud9we8y6uo1miry.png" alt="User Early Demographics" width="800" height="298"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you have an open position in your company, please email me at &lt;a href="mailto:danielhe4rt@gmail.com"&gt;danielhe4rt@gmail.com&lt;/a&gt; and I'll forward it to our best members to apply! &lt;/p&gt;

&lt;h2&gt;
  
  
  5. Published Content
&lt;/h2&gt;

&lt;p&gt;During the last month, members of our community have received several recognitions for the articles produced on this platform. We would like to highlight the following articles, which were among the most relevant articles of their posting weeks (Top 7).&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/scylladb" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__org__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F9699%2F39631723-ec7f-4687-8b0d-56ce667e5742.png" alt="ScyllaDB" width="594" height="789"&gt;
      &lt;div class="ltag__link__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F468493%2F330b0830-a179-4560-9b47-623cd8abeac8.png" alt="" width="512" height="512"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/scylladb/database-101-how-to-model-leaderboards-for-1m-players-game-2pfa" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Database 101: How to Model Leaderboards for 1M Player's Game.&lt;/h2&gt;
      &lt;h3&gt;Daniel Reis for ScyllaDB ・ Jan 29 '24&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#scylladb&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#database&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#yarg&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#tutorial&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;"In the latest installment of his "Database 101" series, &lt;a class="mentioned-user" href="https://dev.to/danielhe4rt"&gt;@danielhe4rt&lt;/a&gt; explores the intricate art of modeling leaderboards for games with a million players. Drawing on personal experiences with the open-source rhythm game YARG and leveraging ScyllaDB's efficiency, the article delves into Query Driven Data Modeling and wide-column database concepts, providing a comprehensive guide for crafting performative leaderboards."&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/basementdevs" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__org__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F8357%2F7f9488ac-1969-477c-be09-1f36cd61420d.png" alt="Basement Developers" width="512" height="512"&gt;
      &lt;div class="ltag__link__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1257274%2F12a280c7-7a40-4ddc-8e04-bb692e0ce473.png" alt="" width="800" height="800"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/basementdevs/everything-that-you-need-to-know-about-git-2440" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Everything you need to know about GIT&lt;/h2&gt;
      &lt;h3&gt;Renato Teixeira for Basement Developers ・ Feb 5 '24&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#beginners&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#tutorial&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#learning&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#git&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;"Discover the world of code versioning with GIT through this comprehensive beginner's guide! Authored by first-time DEV contributor &lt;a class="mentioned-user" href="https://dev.to/reenatoteixeira"&gt;@reenatoteixeira&lt;/a&gt;, this breakout article meticulously unpacks all the essentials of GIT, ensuring a smooth learning journey. With crystal-clear explanations and detailed step-by-step instructions, you'll master the art of GIT, empowering you with seamless version control capabilities."&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/kecbm" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F846886%2F3661bc21-5c36-4c21-b49d-a07cd28718f1.png" alt="kecbm"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/kecbm/staircase-detail-112g" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Staircase detail&lt;/h2&gt;
      &lt;h3&gt;Klecianny Melo ・ Feb 16 '24&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#tutorial&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#programming&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#beginners&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#learning&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;Discover how to build staircases in programming for beginners with this fantastic step-by-step tutorial created by our contributor @kebcm! A staircase is a visual representation formed by a series of steps, each represented by the # character. Explore how to create a function that prints a custom-sized staircase.&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/basementdevs" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__org__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F8357%2F7f9488ac-1969-477c-be09-1f36cd61420d.png" alt="Basement Developers" width="512" height="512"&gt;
      &lt;div class="ltag__link__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F521662%2F2d86c6c2-9f3e-457b-a6de-e69ddfb4733c.png" alt="" width="397" height="397"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/basementdevs/be-a-better-developer-with-these-git-good-practices-2dim" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Be a better developer with these Git good practices&lt;/h2&gt;
      &lt;h3&gt;Anthony Vinicius for Basement Developers ・ Feb 16 '24&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#git&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#github&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#beginners&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;If you're a developer, you likely use Git regularly. It's vital for app development, whether solo or in a team. But many struggle with messy repositories and unclear commit messages / branch names. Learning Git well and sticking to best practices is one of the keys for career growth.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. What now?
&lt;/h2&gt;

&lt;p&gt;So far our community is growing in a way we didn't expect, but still in a healthy way. Many people who have never tried &lt;strong&gt;Technical English&lt;/strong&gt; before have taken their first steps to practice and have begun to &lt;strong&gt;glimpse new possibilities&lt;/strong&gt;, and that's the fuel we need.&lt;/p&gt;

&lt;p&gt;If you want to be a part of this transformative journey, please join our &lt;a href="https://discord.gg/basementdevs" rel="noopener noreferrer"&gt;Discord Server&lt;/a&gt; and don't forget to like and comment on this article! &lt;/p&gt;

&lt;p&gt;Any tip to make our community better is welcome, ok? Stay hydrate and see you next month!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Btw, cheers to &lt;strong&gt;Renato&lt;/strong&gt; and &lt;strong&gt;Anthony&lt;/strong&gt; for helping me on this report :D&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>devrel</category>
      <category>community</category>
      <category>beginners</category>
      <category>career</category>
    </item>
    <item>
      <title>Be a better developer with these Git good practices</title>
      <dc:creator>Anthony Vinicius</dc:creator>
      <pubDate>Fri, 16 Feb 2024 20:44:23 +0000</pubDate>
      <link>https://dev.to/basementdevs/be-a-better-developer-with-these-git-good-practices-2dim</link>
      <guid>https://dev.to/basementdevs/be-a-better-developer-with-these-git-good-practices-2dim</guid>
      <description>&lt;p&gt;If you're a developer, you probably use the versioning system called Git on a daily basis. The use of this tool is crucial for the development process of an application, whether working in a team or individually. However, it's common to encounter messy repositories, commits with unclear messages that don't convey useful information, and misuse of branches, among other issues. Knowing how to use Git correctly and following good practices is essential for those who want to excel in the job market.&lt;/p&gt;




&lt;h2&gt;
  
  
  Table of contents
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Naming Conventions for Git Branches&lt;/li&gt;
&lt;li&gt;Branch Names Convention Prefixes&lt;/li&gt;
&lt;li&gt;Commit Message&lt;/li&gt;
&lt;li&gt;Conventional Commit's&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Naming Conventions for Git Branches&lt;a id="naming-conventions"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;When we're working with code versioning, one of the main good practices that we should follow is using clear and descriptive names for branches, commits, pull requests, etc. Ensuring a concise workflow for all team members is essential. In addition to gaining productivity, documenting the development process of the project historically simplifies teamwork. By following these practices, you'll see benefits soon.&lt;/p&gt;

&lt;p&gt;Based on it, the community created a branch naming convention that you can follow in your project. The use of the following items below is optional, but they can help improve your development skills.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Lowercase:&lt;/strong&gt; Don't use uppercase letters in the branch name, stick to lowercase;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Hyphen separated:&lt;/strong&gt; If your branch name consists of more than one word, separate them with a hyphen. following the kebab-case convention. Avoid PascalCase, camelCase, or snake_case;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. (a-z, 0-9):&lt;/strong&gt; Use only alphanumeric characters and hyphens in your branch name. Avoid any non-alphanumeric character;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Please, don't use continuous hyphens (--).&lt;/strong&gt; This practice can be confusing. For example, if you have branch types (such as a feature, bugfix, hotfix, etc.), use a slash (/) instead;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Avoid ending your branch name with a hyphen&lt;/strong&gt;. It does not make sense because a hyphen separates words, and there's no word to separate at the end;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. This practice is the most important:&lt;/strong&gt; Use descriptive, concise, and clear names that explain what was done on the branch;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wrong branch names&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;fixSidebar&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;feature-new-sidebar-&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FeatureNewSidebar&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;feat_add_sidebar&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Good branch names&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;feature/new-sidebar&lt;/li&gt;
&lt;li&gt;add-new-sidebar&lt;/li&gt;
&lt;li&gt;hotfix/interval-query-param-on-get-historical-data&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Branch Names Convention Prefixes&lt;a id="branch-names"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Sometimes the purpose of a branch isn't clear. It could be a new feature, a bug fix, documentation updates, or anything else. To address this, it's a common practice to use a prefix on the branch name to quickly explain the purpose of the branch.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;feature:&lt;/strong&gt; It conveys a new feature that will be developed. For example, &lt;code&gt;feature/add-filters&lt;/code&gt;;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;release:&lt;/strong&gt; Used to prepare a new release. The prefix &lt;code&gt;release/&lt;/code&gt; is commonly used to do tasks such as last touched and revisions before merging the new updates from the branch master to create a release. For example, &lt;code&gt;release/v3.3.1-beta&lt;/code&gt;;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;bugfix:&lt;/strong&gt; It conveys that you're solving a bug in the code and it's usually related to an issue. For instance, &lt;code&gt;bugfix/sign-in-flow&lt;/code&gt;;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;hotfix:&lt;/strong&gt; Similar to bugfix, but it is related to fixing a critical bug present in the production environment. For example, &lt;code&gt;hotfix/cors-error&lt;/code&gt;;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;docs:&lt;/strong&gt; To write some documentation. For example, &lt;code&gt;docs/quick-start&lt;/code&gt;;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're working in a workflow with task management, like Jira, Trello, ClickUp, or any similar tool that can create User Stories, each card has a number associated. So, is commonly use these card numbers on the prefix of branch names. For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;feature/T-531-add-sidebar&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;docs/T-789-update-readme&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;hotfix/T-142-security-path&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Commit Message&lt;a id="commit-message"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Let's go talk about commit messages. Unfortunately, is so easy to find projects with commit messages like "added a lot of things" or "Pikachu, I choose you"... Yeah, I once found a project where the commit messages were related to a Pokémon fight.&lt;/p&gt;

&lt;p&gt;Commit messages are really important in the development process. Creating a good history will help you a lot of times in your journey. Like branches, commits also have conventions created by the community, which you can learn about below:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;A commit message has three important sections: Subject, Description, and Footer. The subject of a commit is required and defines the purpose of a commit. The description (body) is used to provide additional context and explanation for the commit's purpose. Lastly, there's the footer, commonly used for metadata like assigning a commit. While utilizing both the description and footer is considered a good practice, it's not required.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Use the imperative mood in the subject line.&lt;/strong&gt; For example: &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;Add README.md&lt;/code&gt; ✅;&lt;br&gt;
&lt;code&gt;Added README.md&lt;/code&gt; ❌;&lt;br&gt;
&lt;code&gt;Adding README.md&lt;/code&gt; ❌;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Capitalize the first letter of the subject line.&lt;/strong&gt; For example:&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;Add user authentication&lt;/code&gt; ✅;&lt;br&gt;
&lt;code&gt;add user authentication&lt;/code&gt; ❌;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Don't end the subject line with a period.&lt;/strong&gt; For example:&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;Update unit tests&lt;/code&gt; ✅;&lt;br&gt;
&lt;code&gt;Update unit tests.&lt;/code&gt; ❌;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Limit the subject line to &lt;strong&gt;50 characters&lt;/strong&gt;, i.e., be clear and concise;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Wrap the body at &lt;strong&gt;72 characters&lt;/strong&gt; and separate the subject from a &lt;strong&gt;blank line&lt;/strong&gt;;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If your body of commit has more than one paragraph, so &lt;strong&gt;use blank lines to separate them&lt;/strong&gt;;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If necessary, use &lt;strong&gt;bullet points&lt;/strong&gt; instead of only paragraphs;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Conventional Commit's&lt;a id="conventional-commits"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;"The Conventional Commits specification is a lightweight convention on top of commit messages. It provides an easy set of rules for creating an explicit commit history."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The quote below was obtained from the Conventional Commit's official website. This specification is the most used convention to commit messages in the community. &lt;/p&gt;

&lt;h3&gt;
  
  
  Structure
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;type&amp;gt;[optional scope]: &amp;lt;description&amp;gt;

[optional body]

[optional footer(s)]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Commit Type
&lt;/h3&gt;

&lt;p&gt;The first structure that we have to study is the commit type. It provides a clear context about what's done in this commit. Below you can see the list of commit types and when to use them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;feat:&lt;/strong&gt; Introductions of new functionalities;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;fix:&lt;/strong&gt; Rectifications of software bugs;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;refactor:&lt;/strong&gt; Employed for code alterations preserving its overall functionality;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;chore:&lt;/strong&gt; Updates not impacting production code, involving tool, config, or library adjustments;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;docs:&lt;/strong&gt; Additions or modifications to documentation files;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;perf:&lt;/strong&gt; Code changes enhancing performance;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;style:&lt;/strong&gt; Adjustments related to code presentation, like formatting and whitespace;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;test:&lt;/strong&gt; Inclusion or correction of tests;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;build:&lt;/strong&gt; Modifications affecting the build system or external dependencies;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;ci:&lt;/strong&gt; Alterations to CI configuration files and scripts;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;env:&lt;/strong&gt; Describes adjustments or additions to configuration files within CI processes, such as container configuration parameters.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Scope
&lt;/h3&gt;

&lt;p&gt;A scope is a structure that can be added after the commit's type to provide additional contextual information:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;fix(ui): resolve issue with button alignment&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;feat(auth): implement user authentication&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Body
&lt;/h3&gt;

&lt;p&gt;The body of a commit message provides detailed explanations about the changes introduced by the commit. It's typically added after a blank line following the subject line.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Add new functionality to handle user authentication.

This commit introduces a new module to manage user authentication. It includes
functions for user login, registration, and password recovery.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Footer
&lt;/h3&gt;

&lt;p&gt;The footer of a commit message is used to provide additional information related to the commit. This can include details such as who reviewed or approved the changes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Signed-off-by: John &amp;lt;john.doe@example.com&amp;gt;
Reviewed-by: Anthony &amp;lt;anthony@example.com&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Breaking Change
&lt;/h3&gt;

&lt;p&gt;Indicate that the commit includes significant changes that may lead to compatibility issues or require modifications in dependent code. You can add a &lt;code&gt;BREAKING CHANGE&lt;/code&gt; in the footer or include &lt;code&gt;!&lt;/code&gt; after the type/scope.&lt;/p&gt;

&lt;h3&gt;
  
  
  Examples of commits using conventional commits
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;chore: add commitlint and husky
chore(eslint): enforce the use of double quotes in JSX
refactor: type refactoring
feat: add axios and data handling
feat(page/home): create next routing
chore!: drop support for Node 18
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;With subject, body and footer:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;feat: add function to convert colors in hexadecimal to rgba

Lorem Ipsum is simply dummy text of the printing and typesetting industry.

Lorem Ipsum has been the industry's standard dummy text ever since the 1500s.

Reviewed-by: 2
Refs: #345
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.conventionalcommits.org"&gt;https://www.conventionalcommits.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/@abhay.pixolo/naming-conventions-for-git-branches-a-cheatsheet-8549feca2534"&gt;https://medium.com/@abhay.pixolo/naming-conventions-for-git-branches-a-cheatsheet-8549feca2534&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://se-education.org/guides/conventions/git.html"&gt;https://se-education.org/guides/conventions/git.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://cbea.ms/git-commit/"&gt;https://cbea.ms/git-commit/&lt;/a&gt;
&lt;a href="https://blog.geekhunter.com.br/o-que-e-commit-e-como-usar-commits-semanticos/"&gt;https://blog.geekhunter.com.br/o-que-e-commit-e-como-usar-commits-semanticos/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>git</category>
      <category>github</category>
      <category>webdev</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Everything you need to know about GIT</title>
      <dc:creator>Renato Teixeira</dc:creator>
      <pubDate>Mon, 05 Feb 2024 14:30:00 +0000</pubDate>
      <link>https://dev.to/basementdevs/everything-that-you-need-to-know-about-git-2440</link>
      <guid>https://dev.to/basementdevs/everything-that-you-need-to-know-about-git-2440</guid>
      <description>&lt;p&gt;I'm sure you can imagine the importance of versioning code, so that we can &lt;strong&gt;revert changes&lt;/strong&gt; and &lt;strong&gt;recover lost data among other possibilities&lt;/strong&gt;.&lt;br&gt;
I bet you know someone &lt;em&gt;(not me hehe)&lt;/em&gt; who does version control with their files by creating copies of them with increasingly creative names...&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsffhjyl41pfnjklivnsv.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsffhjyl41pfnjklivnsv.gif" alt="GIF that simulates the duplication of a file with different names. Example: article, article-finalversion, etc." width="610" height="182"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This was probably how anyone would do version control with their code as well before 1972, with the release of &lt;strong&gt;SCCS &lt;em&gt;(Source Code Control System)&lt;/em&gt;&lt;/strong&gt;, one of the first &lt;strong&gt;centralized&lt;/strong&gt; version control software ever released.&lt;/p&gt;

&lt;p&gt;But we're not here to talk about SCCS, what really interests us now is &lt;strong&gt;GIT&lt;/strong&gt;, the &lt;strong&gt;distributed&lt;/strong&gt; open-source version control software that celebrates its 20th anniversary next year &lt;em&gt;(07/04/2005)&lt;/em&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Table of contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;1. What's GIT?&lt;/li&gt;
&lt;li&gt;2. How does GIT work?&lt;/li&gt;
&lt;li&gt;3. Installing GIT&lt;/li&gt;
&lt;li&gt;4. Configuring GIT&lt;/li&gt;
&lt;li&gt;5. Starting a local repository&lt;/li&gt;
&lt;li&gt;6. Working with GIT&lt;/li&gt;
&lt;li&gt;7. Knowing branches&lt;/li&gt;
&lt;li&gt;8. Syncing with the remote repository&lt;/li&gt;
&lt;li&gt;9. Conclusion&lt;/li&gt;
&lt;li&gt;10. References&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  1. What's GIT? &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;GIT is an open-source &lt;strong&gt;distributed&lt;/strong&gt; version control system launched in 2005 and developed by Linus Torvald &lt;em&gt;(yh, the Linux kernel creator)&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;With GIT, we can locally &lt;strong&gt;control the versions of a project&lt;/strong&gt; &lt;em&gt;(in the working folder)&lt;/em&gt; and synchronize all changes to a remote repository &lt;em&gt;(on GitHub, for example)&lt;/em&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  2. How does GIT work? &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Imagine a &lt;strong&gt;physical&lt;/strong&gt; file cabinet where there's a folder with all the project files. Whenever someone needs to manipulate a file, they have to pick it up, &lt;strong&gt;removing it from the folder and returning it to the folder after finishing&lt;/strong&gt;. So, it is &lt;strong&gt;impossible&lt;/strong&gt; for two people to work on the same file, completely avoiding any possible conflicts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;BUT THAT'S NOT HOW GIT WORKS!&lt;/strong&gt; &lt;em&gt;(thank God)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This is how a &lt;strong&gt;CENTRALIZED&lt;/strong&gt; version control system works, in which the user needs to &lt;strong&gt;"check-out"&lt;/strong&gt; and &lt;strong&gt;"check-in"&lt;/strong&gt; files, i.e. whenever someone needs to work on a specific file, they need to check-out that file, &lt;strong&gt;removing it from the repository&lt;/strong&gt;, and then check-in the file once the work is done, &lt;strong&gt;returning it to the repository&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F26a9j0m4pcu5prb0kauo.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F26a9j0m4pcu5prb0kauo.gif" alt="GIF that simulates the operation of a centralized version control system." width="610" height="182"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In a &lt;strong&gt;DISTRIBUTED&lt;/strong&gt; system like &lt;strong&gt;GIT&lt;/strong&gt;, it's possible for several people to access files from the same remote repository. Whenever someone needs to manipulate a file, they can simply &lt;strong&gt;clone&lt;/strong&gt; it &lt;em&gt;(or clone the entire repository)&lt;/em&gt; locally to their machine, and then send the modifications back to the remote repository. This makes it possible for &lt;strong&gt;several people to work on the same project&lt;/strong&gt;, even manipulating the &lt;strong&gt;same files&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnb0x0u9kc6m7z2hz7zfj.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnb0x0u9kc6m7z2hz7zfj.gif" alt="GIF that simulates the operation of a distributed version control system." width="610" height="182"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is what allows the distribution of large &lt;strong&gt;open-source&lt;/strong&gt; projects, with people from different parts of the world working on the same project, managing modifications and possible conflicts &lt;em&gt;(yes, merge conflicts can happen here)&lt;/em&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  3. Installing GIT &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GIT&lt;/strong&gt; is available for the main operating systems &lt;em&gt;(Windows, Linux, MacOs...)&lt;/em&gt; with a very simple installation process, which can be done by &lt;strong&gt;command line&lt;/strong&gt; or through the &lt;strong&gt;official installer&lt;/strong&gt; at &lt;a href="https://git-scm.com/" rel="noopener noreferrer"&gt;git-scm.com&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  3.1 On Windows
&lt;/h3&gt;

&lt;p&gt;To install GIT on Windows, simply go to the official website and &lt;a href="https://git-scm.com/download/win" rel="noopener noreferrer"&gt;download the installer&lt;/a&gt;. Then just &lt;strong&gt;follow the instructions&lt;/strong&gt; and everything should be fine then we'll be able to use the GIT commands in our terminal.&lt;/p&gt;
&lt;h3&gt;
  
  
  3.2 On Linux
&lt;/h3&gt;

&lt;p&gt;For Linux, we can install &lt;strong&gt;GIT&lt;/strong&gt; using the &lt;strong&gt;command&lt;/strong&gt; below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;git-all
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;By doing this, &lt;strong&gt;GIT&lt;/strong&gt; must be ready to run in our terminal.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.3 On MacOS
&lt;/h3&gt;

&lt;p&gt;For Mac, the easiest way to install &lt;strong&gt;GIT&lt;/strong&gt; is to install &lt;a href="https://brew.sh/" rel="noopener noreferrer"&gt;Homebrew&lt;/a&gt; and then run the &lt;strong&gt;command&lt;/strong&gt; below in the terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then &lt;strong&gt;GIT&lt;/strong&gt; must be ready to run in our terminal.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Configuring GIT &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;After installing, it's important to &lt;strong&gt;configure GIT&lt;/strong&gt; with the &lt;strong&gt;commands&lt;/strong&gt; below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git config &lt;span class="nt"&gt;--global&lt;/span&gt; user.name &lt;span class="s2"&gt;"[username]"&lt;/span&gt;
&lt;span class="c"&gt;# e.g. John Doe&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git config &lt;span class="nt"&gt;--global&lt;/span&gt; user. email &lt;span class="s2"&gt;"[email@email.com]"&lt;/span&gt;
&lt;span class="c"&gt;# e.g. johndoe@email.com&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Also, it's possible to configure specific users for certain local repositories by removing the &lt;code&gt;--global&lt;/code&gt; tag.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  5. Starting a local repository &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;With &lt;strong&gt;GIT&lt;/strong&gt; configured, we can &lt;strong&gt;start our local repository&lt;/strong&gt;. To do this, we can &lt;strong&gt;start a new repository from scratch&lt;/strong&gt; or &lt;strong&gt;clone an existing remote repository&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.1 Starting from scratch (git init)
&lt;/h3&gt;

&lt;p&gt;To start a new repository, simply navigate to the desired repository &lt;strong&gt;root folder&lt;/strong&gt; and run the command below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiw35xe9jwrwzo937to5b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiw35xe9jwrwzo937to5b.png" alt="Screenshot of a Linux terminal running the " width="771" height="80"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;By doing this, a &lt;code&gt;.git&lt;/code&gt; directory will be created inside the project folder, which will be &lt;strong&gt;responsible for the version control&lt;/strong&gt; in the working folder of this local repository.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.2 Cloning an existing repository (git clone)
&lt;/h3&gt;

&lt;p&gt;Cloning an existing remote repository is as easy as starting a new one from scratch. To do this, simply use the &lt;code&gt;git clone&lt;/code&gt; command, with the &lt;strong&gt;remote repository URL&lt;/strong&gt; to be cloned inside the folder where we want to download the repository:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone &lt;span class="o"&gt;[&lt;/span&gt;repository-url]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnlt8rtua4ri7kpnna5el.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnlt8rtua4ri7kpnna5el.png" alt="Screenshot of a Linux terminal running the " width="800" height="170"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then the entire repository must be &lt;strong&gt;cloned&lt;/strong&gt; to our local machine and &lt;strong&gt;automatically linked to the related remote repository&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;With a cloned repository, we will no longer need to use the &lt;code&gt;git remote&lt;/code&gt; command in the future.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  6. Working with GIT &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Within our &lt;strong&gt;local repository&lt;/strong&gt;, we can create the files needed for our project, but they &lt;strong&gt;won't be automatically synced by GIT&lt;/strong&gt;, we'll need to report it when there are any changes to be versioned.&lt;/p&gt;

&lt;p&gt;Thus, we can &lt;strong&gt;manipulate&lt;/strong&gt; the files as we wish and &lt;strong&gt;after finishing the desired changes&lt;/strong&gt;, &lt;strong&gt;send the updated files to GIT&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;To do this, it is important to understand that there is a &lt;strong&gt;3 stage infinite flow&lt;/strong&gt; &lt;em&gt;(yes, infinite)&lt;/em&gt; in version control:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;              MODIFY -&amp;gt; STAGE -&amp;gt; COMMIT
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;MODIFY:&lt;/strong&gt; The first stage of version control, this is where we find the &lt;strong&gt;files that have changed&lt;/strong&gt; compared to the last available version.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;STAGE:&lt;/strong&gt; The second stage of version control, this is where we place &lt;strong&gt;modified files that we want to add&lt;/strong&gt; to our next commit.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;COMMIT:&lt;/strong&gt; Final stage of version control, when we &lt;strong&gt;confirm the changes&lt;/strong&gt;, sending the modified files that were in stage to the local repository.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After committing the modified files, we have a &lt;strong&gt;new version&lt;/strong&gt; available in the local repository, which can again receive updates, going one more time to &lt;em&gt;"modified"&lt;/em&gt;, then placed in &lt;em&gt;"stage"&lt;/em&gt; and, again, being &lt;em&gt;"committed"&lt;/em&gt;, confirming a newer version and so on &lt;em&gt;(and therefore, "infinite" lol)&lt;/em&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It's important to notice that a commit doesn't overwrite the old version of the modified files, but includes the new version with a pointer to the last version, thus keeping track of the versions of each file tracked by GIT.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  6.1 Adding and commiting (git add and git commit)
&lt;/h3&gt;

&lt;p&gt;Although it might sounds complex, performing the version control flow is &lt;strong&gt;very simple&lt;/strong&gt;. Since the desired modifications are completed, we &lt;strong&gt;add the modified files that we want to commit on stage&lt;/strong&gt; with the command below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git add &lt;span class="o"&gt;[&lt;/span&gt;filename]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;git add -A&lt;/code&gt; -&amp;gt; adds all modified files to stage at once.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git add *.[extensão-do-arquivo]&lt;/code&gt; -&amp;gt; adds all modified files with the specified file extension to stage at once (e.g. &lt;code&gt;git add *.html&lt;/code&gt;)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We can check our current local repository &lt;strong&gt;status&lt;/strong&gt; at any time using the &lt;code&gt;git status&lt;/code&gt; command:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe28lg7wym8s0woytgzqz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe28lg7wym8s0woytgzqz.png" alt="Screenshot of a Linux terminal running the " width="789" height="258"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Note that when we run &lt;code&gt;git status&lt;/code&gt; inside the repository &lt;strong&gt;after creating a new file&lt;/strong&gt;, the new file is shown as &lt;em&gt;"Untracked"&lt;/em&gt;. This means that this file is &lt;strong&gt;fresh new&lt;/strong&gt; and still needs to be added to any commit in order to be &lt;strong&gt;tracked&lt;/strong&gt; by &lt;strong&gt;GIT&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It's possible to let GIT ignore specific files or folders within the repository. To do this, we can simply add a file to the root folder called &lt;code&gt;.gitignore&lt;/code&gt; and write the name of the files or folders that should be ignored inside it.&lt;/p&gt;

&lt;p&gt;CAUTION: Ignored files and folders will no longer appear to the GIT track, not even as "Untracked". To reset the tracking, simply delete the desired names from the &lt;code&gt;.gitignore&lt;/code&gt; file.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To include a file, we can run the &lt;code&gt;git add&lt;/code&gt; command with the name of the file that we want to add &lt;em&gt;("index.html" in this case)&lt;/em&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpz1hnk9gpnxtv2s8xort.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpz1hnk9gpnxtv2s8xort.png" alt="Screenshot of a Linux terminal running the command " width="633" height="260"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This way, by re-running &lt;code&gt;git status&lt;/code&gt; we can see that the new file has been added to &lt;em&gt;"stage"&lt;/em&gt; and is &lt;strong&gt;finally ready to be sent in our next commit&lt;/strong&gt;, which can be done using the command below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"[descriptive-message]"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Commits have unique IDs (hash codes) and are &lt;strong&gt;IMMUTABLE&lt;/strong&gt;, i.e. they cannot be modified once they have been confirmed.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git commit -a&lt;/code&gt; -&amp;gt; performs a direct commit, adding all the modified files to stage and committing them.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;After successfully committing a file&lt;/strong&gt;, when running &lt;code&gt;git status&lt;/code&gt; we notice that &lt;strong&gt;there are no more modified files to be uploaded&lt;/strong&gt;, since all the modifications were effectively saved in our local repository with our last &lt;strong&gt;commit&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fryqqs4mi46hxtuex199i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fryqqs4mi46hxtuex199i.png" alt="Screenshot of a Linux terminal running the command " width="773" height="191"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Also, it's possible to &lt;strong&gt;verify the changes made&lt;/strong&gt; by reviewing the repository's commit log, using the &lt;code&gt;git log&lt;/code&gt; command, which shows some metadata of all the commits made, such as the hash code, branch, author, date, etc.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fljvj9se6srxslsu8vsj7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fljvj9se6srxslsu8vsj7.png" alt="Screenshot of a Linux terminal running the command " width="672" height="168"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This whole process can be repeated to add new files that are needed for our project, modify them and send them to the local repository by making new commits.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2uez3henix8kchperuw8.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2uez3henix8kchperuw8.gif" alt="GIF that simulates multiple commits in a GIT branch." width="610" height="182"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;git log -N&lt;/code&gt; -&amp;gt; displays a log with the last N commits.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git log [branch-A] [branch-B]&lt;/code&gt; -&amp;gt; displays a log of commits that are in "branch-B" but not in "branch-A".&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git log --follow [filename]&lt;/code&gt; -&amp;gt; displays a log of commits that changed the specified file, even if it has changed its name.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git diff&lt;/code&gt; -&amp;gt; lists the changes made compared to the latest available version in the repository.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git diff [nome-do-arquivo]&lt;/code&gt; -&amp;gt; lists the changes made to the specified file in relation to its last available version in the repository.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  6.2 Undo changes before and after commiting
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Before a commit is made&lt;/strong&gt;, any changes made to the local repository can be undone or changed, but &lt;strong&gt;once the commit is made, it cannot be changed&lt;/strong&gt;. This is because commits are &lt;strong&gt;immutable objects&lt;/strong&gt;, meaning that it is impossible to edit or change the data in a commit.&lt;/p&gt;

&lt;p&gt;However, it is &lt;strong&gt;possible to make new commits&lt;/strong&gt; that undo changes, or correct incorrect information in previous commits. In either way, we can use one of the commands below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git checkout &lt;span class="nt"&gt;--&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;filename]
&lt;span class="c"&gt;# Discards changes made to the local file before the commit (irreversible action)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git reset &lt;span class="nt"&gt;--hard&lt;/span&gt; HEAD
&lt;span class="c"&gt;# Discards changes made to a file that is in stage (before the commit)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git reset &lt;span class="nt"&gt;--hard&lt;/span&gt; HEAD~1
&lt;span class="c"&gt;# Discards the last commit made in the local repository (only the last commit)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git commit &lt;span class="nt"&gt;--amend&lt;/span&gt;
&lt;span class="c"&gt;# Creates a new commit, replacing the last commit made in the local repository&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git revert &lt;span class="o"&gt;[&lt;/span&gt;commit-hash]
&lt;span class="c"&gt;# Creates a new commit, reverting the changes of the specified commit&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  7. Knowing branches &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;branch&lt;/strong&gt; is nothing more than a &lt;strong&gt;ramification&lt;/strong&gt; of the repository, and so far all actions have been performed on the branch &lt;code&gt;master/main'&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;By default, the first branch created in the repository is the &lt;code&gt;master/main&lt;/code&gt;, which is the main branch of the repository.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  7.1 Why use branches?
&lt;/h3&gt;

&lt;p&gt;It may not seem like much at first, but &lt;strong&gt;branches give enormous power to the project development&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Imagine we're developing a web platform, and we want to &lt;strong&gt;test a new feature&lt;/strong&gt;, but our repository is already &lt;strong&gt;hosted or shared&lt;/strong&gt; with other people, and any problematic change could cause a bad experience for them. What can we do?&lt;/p&gt;

&lt;p&gt;If you've been thinking about &lt;strong&gt;copy and paste&lt;/strong&gt; the project folder, creating a new &lt;strong&gt;"test version"&lt;/strong&gt;, you're right! Well, almost...&lt;/p&gt;

&lt;p&gt;With GIT, we can do something similar with branches. Since they are &lt;strong&gt;branches&lt;/strong&gt;, we can simply &lt;strong&gt;create a new branch called "test"&lt;/strong&gt;, and thus have a version of our project in a completely &lt;strong&gt;isolated branch&lt;/strong&gt;, ready to be flipped &lt;strong&gt;without risking the main branch&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fszc081nndoi18vklty5r.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fszc081nndoi18vklty5r.gif" alt="GIF that simulates the creation of a new branch with new commits." width="610" height="182"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  7.2 Creating branches (git branch)
&lt;/h3&gt;

&lt;p&gt;Creating a &lt;strong&gt;branch&lt;/strong&gt; means creating a parallel copy of the repository that can be worked on independently, without affecting the &lt;code&gt;master/main&lt;/code&gt; branch. To do this, we can simply run the command below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git branch &lt;span class="o"&gt;[&lt;/span&gt;branch-name]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Running the &lt;code&gt;git branch&lt;/code&gt; command without a specific branch name must display the list of available branches in the repository, with a "*" marking the branch that's currently in use.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Before running the &lt;code&gt;git branch test&lt;/code&gt; command, the &lt;code&gt;git branch&lt;/code&gt; command only returned the &lt;code&gt;master&lt;/code&gt; branch.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvqpdrtvhze9qhr31ewbh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvqpdrtvhze9qhr31ewbh.png" alt="Screenshot of a Linux terminal running the " width="558" height="172"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After creating a new branch, we can run the command below to switch between the available branches:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git checkout &lt;span class="o"&gt;[&lt;/span&gt;branch-name]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After running the &lt;code&gt;git checkout test&lt;/code&gt; command we can see that the &lt;strong&gt;active branch is switched&lt;/strong&gt;. From that moment on, &lt;strong&gt;all committed information will be sent to the &lt;code&gt;test&lt;/code&gt; branch&lt;/strong&gt; of the repository, without affecting the branch &lt;code&gt;master/main&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fegau7y81leig8za36myi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fegau7y81leig8za36myi.png" alt="Screenshot of a Linux terminal running the " width="582" height="150"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It's possible to create as many branches as we need, and we can interact with the existing branches using the commands below:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git checkout -b [branch-name]&lt;/code&gt; -&amp;gt; creates a new branch with the given name and directly switches to it.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git branch -d [branch-name]&lt;/code&gt; -&amp;gt; deletes the specified branch.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git branch -m [new-name]&lt;/code&gt; -&amp;gt; changes the name of the current branch to the given name.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  7.3 Merging branches (git merge)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;When finished working&lt;/strong&gt; on a &lt;strong&gt;different branch&lt;/strong&gt;, and we're sure that the changes we've made haven't caused any problems in the project, we can &lt;strong&gt;merge&lt;/strong&gt; the current branch in the &lt;code&gt;master/main&lt;/code&gt; branch, &lt;strong&gt;applying all the changes from the current branch to the main branch of the repository&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;To &lt;strong&gt;merge&lt;/strong&gt; branches, we need to &lt;strong&gt;switch to the branch that will receive the changes&lt;/strong&gt; and run the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git merge &lt;span class="o"&gt;[&lt;/span&gt;branch-name]
&lt;span class="c"&gt;# Merge the given branch into the active branch&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here, since we are on the branch &lt;code&gt;test&lt;/code&gt;, &lt;strong&gt;we should switch to the branch &lt;code&gt;master&lt;/code&gt;&lt;/strong&gt; using the &lt;code&gt;git checkout&lt;/code&gt; command, and then run the &lt;code&gt;git merge&lt;/code&gt; command with the name of the branch we want to merge &lt;em&gt;("test", in this case)&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa6tqap1uu5gjipkety6w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa6tqap1uu5gjipkety6w.png" alt="Screenshot of a Linux terminal running the command " width="618" height="215"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;By doing this, all the work done on the branch &lt;code&gt;test&lt;/code&gt; &lt;em&gt;(in this case, the creation of the &lt;code&gt;style.css&lt;/code&gt; file)&lt;/em&gt; will be merged in the branch &lt;code&gt;master&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3hs17m005ogm0qlbedjy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3hs17m005ogm0qlbedjy.gif" alt="GIF that simulates the merge process between two branches." width="610" height="182"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  7.4 Merge conflicts
&lt;/h3&gt;

&lt;p&gt;Merging different branches with &lt;code&gt;git merge&lt;/code&gt; can lead to some &lt;strong&gt;conflicts&lt;/strong&gt; in cases where &lt;strong&gt;one or more files have been changed on the same lines&lt;/strong&gt; and the merge cannot be done &lt;strong&gt;automatically&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9mwedudsff1yf8kpzguc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9mwedudsff1yf8kpzguc.png" alt="Screenshot of a Linux terminal running the " width="692" height="126"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When this happens, we can run the &lt;code&gt;git status&lt;/code&gt; command to check &lt;strong&gt;which files&lt;/strong&gt; are in conflict.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhcfpmta2yiy1xpyc729u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhcfpmta2yiy1xpyc729u.png" alt="Screenshot of a Linux terminal running the " width="681" height="345"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We'll need to &lt;strong&gt;solve the conflicts&lt;/strong&gt; before proceeding with the merge, either by defining which changes should take place, or by reviewing the changes so that they are mutually compatible. To do this, &lt;strong&gt;GIT will insert markers into the conflicting files&lt;/strong&gt; to help with the resolution.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa0e727le3ogmhtuq0g7w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa0e727le3ogmhtuq0g7w.png" alt="Screenshot of the conflicting file opened in a text editor, showing the markers created by GIT to help resolve the conflicts." width="453" height="189"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After solving the conflicts, we just need to put the modified files back on stage, commit the new no-conflict versions, and run the &lt;code&gt;git merge&lt;/code&gt; command again, which must successfully merge without any problems.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Syncing with the remote repository &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;We already know that it's possible to &lt;strong&gt;connect our local repository to a remote repository&lt;/strong&gt; and synchronize all our work remotely, keeping it &lt;strong&gt;up to date&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;To do this we'll need to run the &lt;code&gt;git push&lt;/code&gt; command, which &lt;strong&gt;sends all commits from the local repository to the remote repository&lt;/strong&gt;, but first we need to **configure a remote repository.&lt;/p&gt;

&lt;h3&gt;
  
  
  8.1 Configuring the remote repository
&lt;/h3&gt;

&lt;p&gt;Starting a &lt;em&gt;remote repository&lt;/em&gt; is quite simple. Here we'll use &lt;strong&gt;GitHub&lt;/strong&gt; to do it.&lt;/p&gt;

&lt;p&gt;First, we need to &lt;strong&gt;start a new empty repository&lt;/strong&gt; in our GitHub account &lt;em&gt;(just by choosing a name and clicking "Create repository")&lt;/em&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fug1aw5eq15du36vd1hri.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fug1aw5eq15du36vd1hri.png" alt="Screenshot of the repository creation page on GitHub." width="729" height="844"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, we need to &lt;strong&gt;configure the relationship between the remote repository and the local repository&lt;/strong&gt; by running the following command inside our local repository:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git remote add origin &lt;span class="o"&gt;[&lt;/span&gt;remote-repository-url]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frhrlfg0f0pgljl5b18vl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frhrlfg0f0pgljl5b18vl.png" alt="Screenshot of a Linux terminal running the " width="800" height="87"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;git remote -v&lt;/code&gt; -&amp;gt; shows the URL of the remote repository that's actually connected to the local repository.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;With the remote repository properly &lt;strong&gt;connected&lt;/strong&gt;, we need to &lt;strong&gt;change the name of our local branch &lt;code&gt;master/main&lt;/code&gt;&lt;/strong&gt; to "main" with the command &lt;code&gt;git branch -m main&lt;/code&gt; &lt;em&gt;(ignore this step if your local branch is already called &lt;code&gt;main&lt;/code&gt;)&lt;/em&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff0al7joro01pch0ac124.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff0al7joro01pch0ac124.png" alt="Screenshot of a Linux terminal running the " width="618" height="150"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It's important to keep the main branch of the local repository with the same name as the main branch of the remote repository to which we are pushing.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Finally, after completing the above steps, we can &lt;strong&gt;sync&lt;/strong&gt; our local repository with the remote repository for the first time using the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git push &lt;span class="nt"&gt;-u&lt;/span&gt; origin main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvkdyis8y989xron52nc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvkdyis8y989xron52nc.png" alt="Screenshot of a Linux terminal running the " width="676" height="71"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When we run the &lt;code&gt;git push -u origin main&lt;/code&gt; command, we may need to enter our &lt;strong&gt;GitHub credentials&lt;/strong&gt; &lt;em&gt;(user and access token)&lt;/em&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you don't know what a &lt;strong&gt;GitHub access token&lt;/strong&gt; is, or you don't have one access token set up, &lt;a href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#creating-a-personal-access-token-classic" rel="noopener noreferrer"&gt;click here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We can also work around this by configuring &lt;strong&gt;authentication using the GitHub CLI&lt;/strong&gt;. Find out how &lt;a href="https://docs.github.com/en/get-started/getting-started-with-git/caching-your-github-credentials-in-git" rel="noopener noreferrer"&gt;by clicking here&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;After &lt;strong&gt;authenticating&lt;/strong&gt;, &lt;code&gt;git push&lt;/code&gt; should run successfully, synchronizing all commits in the local repository with the remote repository.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvp7q4htszkzrfc6vepcl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvp7q4htszkzrfc6vepcl.png" alt="Screenshot of a Linux terminal showing the continuation of the " width="676" height="296"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2rqfhi6s6jh369tseh5y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2rqfhi6s6jh369tseh5y.png" alt="Screenshot of the remote repository on GitHub after receiving the " width="800" height="233"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  8.2 Git push after the first time (git push)
&lt;/h3&gt;

&lt;p&gt;After going through all the above steps, &lt;strong&gt;new syncs&lt;/strong&gt; can be done using the &lt;code&gt;git push&lt;/code&gt; command alone, without any additional parameters, like shown below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faoatcspiwosywih07nsm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faoatcspiwosywih07nsm.png" alt="Screenshot of a Linux terminal running the " width="786" height="498"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjskxpghboi62mqw2qcb2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjskxpghboi62mqw2qcb2.png" alt="Screenshot of the remote repository on GitHub after receiving the new updates." width="800" height="268"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;In this case, the authentication needed to run the command &lt;code&gt;git push&lt;/code&gt; was bypassed using the &lt;strong&gt;GitHub CLI&lt;/strong&gt;. You can find out how by &lt;a href="https://docs.github.com/en/get-started/getting-started-with-git/caching-your-github-credentials-in-git" rel="noopener noreferrer"&gt;clicking here&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  8.3 Updating the local repository (git pull)
&lt;/h3&gt;

&lt;p&gt;With a &lt;strong&gt;distributed&lt;/strong&gt; remote repository, it's possible for changes to be made &lt;strong&gt;remotely&lt;/strong&gt; &lt;em&gt;(directly in the remote repository)&lt;/em&gt;, causing our local repository to become &lt;strong&gt;outdated&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Thinking about that, it's very important to &lt;strong&gt;update the local repository&lt;/strong&gt; and sync any changes that we got in the remote repository, &lt;strong&gt;ensuring that the local project is always with the latest version available in the remote repository&lt;/strong&gt;. To do this we can run the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git pull
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Imagine that a &lt;strong&gt;new file&lt;/strong&gt; &lt;code&gt;README.md&lt;/code&gt; has been created &lt;strong&gt;directly in our remote repository&lt;/strong&gt; and because of that our local repository is now outdated.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhccw00vyr7j6lcfm02d2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhccw00vyr7j6lcfm02d2.png" alt="Screenshot of the remote repository with a new README.md file added remotely." width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Within the local repository we can &lt;strong&gt;synchronize&lt;/strong&gt; the changes from the remote repository using &lt;code&gt;git pull&lt;/code&gt; as mentioned above.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fit9ylx1imd94yey5d0wd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fit9ylx1imd94yey5d0wd.png" alt="Screenshot of a Linux terminal running the " width="677" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The first 7 lines returned when we run the &lt;code&gt;git pull&lt;/code&gt; command are the return of the &lt;code&gt;git fetch&lt;/code&gt; command. In other words, if we run the &lt;code&gt;git pull&lt;/code&gt; command without first running the &lt;code&gt;git fetch&lt;/code&gt; command, GIT will run both together to retrieve the updates from the remote repository and synchronize them to the local repository.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git fetch&lt;/code&gt; -&amp;gt; fetch updates from the remote repository, but does not sync the local repository (requires &lt;code&gt;git pull&lt;/code&gt;).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  9. Conclusion &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;All this leads us to the certainty that GIT is a version control system that is necessary in the daily life of a programmer, and knowing its main commands and uses can be the turning point in our technical seniority. Finally, with the local and remote repositories synced and updated and with everything we've learned so far, we're ready to move forward with the practicality of this awesome version control system.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. References &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://git-scm.com/docs/git#_git_commands" rel="noopener noreferrer"&gt;GIT's official documentation.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/ts-H3W1uLMM?si=-hKGkUmwgT2lZJwy" rel="noopener noreferrer"&gt;[PT-BR] GIT: Mini course to get you started (learn in 45 minutes) - Codigo Fonte TV&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>beginners</category>
      <category>tutorial</category>
      <category>learning</category>
      <category>git</category>
    </item>
    <item>
      <title>I'm creating a new tech community</title>
      <dc:creator>Daniel Reis</dc:creator>
      <pubDate>Mon, 15 Jan 2024 15:01:52 +0000</pubDate>
      <link>https://dev.to/basementdevs/im-creating-a-new-tech-community-42mh</link>
      <guid>https://dev.to/basementdevs/im-creating-a-new-tech-community-42mh</guid>
      <description>&lt;p&gt;What's up folks! I'm here to recruit the coolest people to join my new community. &lt;/p&gt;

&lt;p&gt;Recently I decided to step down from my previous community, He4rt Developers (PT-BR) community and start a new thing focused in the international environment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Yet Another Tech Community
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7uw0fdhxw7ebyk5toj8n.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7uw0fdhxw7ebyk5toj8n.jpg" alt="First Community Meeting" width="800" height="490"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;center&gt;
&lt;p&gt;First weekly community meeting with a peak of 54 members&lt;/p&gt;
&lt;/center&gt;

&lt;p&gt;The community is called &lt;strong&gt;Basement Devs&lt;/strong&gt;, a community focused to help people to achieve better opportunities in Europe mostly (US can be a thing as well). &lt;/p&gt;

&lt;p&gt;Why I decided to start that: I want to give more people a &lt;strong&gt;safe place to practice English&lt;/strong&gt; and get better opportunities around the world through my network with the Microsoft MVP program, Developer Relations communities, and tech events I'm currently attending.&lt;/p&gt;

&lt;p&gt;I've been working with communities for 5 years so far, but this is the first time I've trying to make this a global thing, so it would be cool to have more people join us! &lt;/p&gt;

&lt;p&gt;So far the community has &lt;strong&gt;1,160 members&lt;/strong&gt; and 1 week of existence and most of the members are mid/senior level, Brazilians, from all possible backgrounds and stacks who &lt;strong&gt;want to mentor&lt;/strong&gt; a non-Portuguese speaker (any level) to practice their English. &lt;/p&gt;

&lt;p&gt;Also if you know anyone that wants to learn about programming, we'll be really glad to help them!&lt;/p&gt;

&lt;h2&gt;
  
  
  So what? Who can join us?
&lt;/h2&gt;

&lt;p&gt;If you're starting at programming or is already at the market and looking for guidance, our community is what you're looking for! &lt;/p&gt;

&lt;p&gt;We have members that works in huge companies like X-&lt;strong&gt;Team, Spotify and GitHub&lt;/strong&gt; (among many others) that will gladly &lt;strong&gt;help you when possible&lt;/strong&gt;!&lt;/p&gt;

&lt;p&gt;And if you're in &lt;strong&gt;university&lt;/strong&gt;, it will also be a cool thing for you to share some of your problems and solutions for specific classes.&lt;/p&gt;

&lt;p&gt;The only thing that we ask you for is to respect the &lt;strong&gt;community rules&lt;/strong&gt; and the &lt;strong&gt;Discord guidelines&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Next Steps: stick together ft. Rust!
&lt;/h2&gt;

&lt;p&gt;Our focus is on the Discord community, and I also decided to use this fresh start to learn more about Rust. So all the tools/bots/whatever we're going to build there will use it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq6sbgaegdpo31lftfcd4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq6sbgaegdpo31lftfcd4.png" alt="Weekly meeting schedule" width="589" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Also I already scheduled a &lt;strong&gt;weekly growth meeting&lt;/strong&gt;, a very special moment to understand from the community what will be our next steps and also bring some good news! This meeting happens every Tuesday at:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;5PM (EST)&lt;/li&gt;
&lt;li&gt;7PM (BRT)&lt;/li&gt;
&lt;li&gt;11PM (CET)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;... so feel free to join us if possible!&lt;/p&gt;

&lt;p&gt;Usually I do 6h at least of LiveCoding at Twitch and I'm getting at least 1h to discuss about the community together with the members, so, feel free to join us there as well!&lt;/p&gt;

&lt;p&gt;Anyway, thanks for reading this until now and welcome to our community!&lt;/p&gt;

&lt;p&gt;Link to &lt;a href="https://discord.gg/basementdevs" rel="noopener noreferrer"&gt;Discord Community&lt;/a&gt;&lt;br&gt;
Link to &lt;a href="https://twitch.tv/danielhe4rt" rel="noopener noreferrer"&gt;Twitch Channel&lt;/a&gt;&lt;br&gt;
Link to &lt;a href="https://twitter.com/danielhe4rt" rel="noopener noreferrer"&gt;Twitter Profile&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devrel</category>
      <category>community</category>
      <category>codenewbie</category>
      <category>softwaredevelopment</category>
    </item>
  </channel>
</rss>
