<?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: Jorge Catriel Lopez</title>
    <description>The latest articles on DEV Community by Jorge Catriel Lopez (@catriel).</description>
    <link>https://dev.to/catriel</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%2Fuser%2Fprofile_image%2F428869%2F550e744c-ca80-4111-b7ad-9f31478e6e5e.jpeg</url>
      <title>DEV Community: Jorge Catriel Lopez</title>
      <link>https://dev.to/catriel</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/catriel"/>
    <language>en</language>
    <item>
      <title>Navigating the Future: AI and Automation in Telecommunications</title>
      <dc:creator>Jorge Catriel Lopez</dc:creator>
      <pubDate>Mon, 18 Mar 2024 19:44:24 +0000</pubDate>
      <link>https://dev.to/catriel/navigating-the-future-ai-and-automation-in-telecommunications-29a6</link>
      <guid>https://dev.to/catriel/navigating-the-future-ai-and-automation-in-telecommunications-29a6</guid>
      <description>&lt;p&gt;The telecommunications industry is on the brink of a new era, shaped by AI and automation. These technologies are set to redefine service delivery, network management, and customer engagement. But what do these changes mean for the industry's future?&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;AI's Role in Enhancing Connectivity&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;AI transforms telecommunications by optimizing network operations, improving customer service through chatbots, and enhancing security. This technology is crucial for predictive maintenance, reducing downtime by anticipating and rectifying network issues before they affect users. AI's ability to manage and analyze vast datasets in real-time supports the seamless deployment of next-generation services, including 5G, enhancing connectivity across the globe.&lt;/p&gt;

&lt;p&gt;AI technologies such as speech-to-text (STT), text-to-speech (TTS), and computer vision (CV) enhance the interaction between users and applications, while noise control and speech compression technologies ensure clear communication​​.&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/evgeniykrasnokutsky" 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%2F834200%2F37ed028a-f37c-4d1f-95be-9c107d80abc3.png" alt="evgeniykrasnokutsky"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/evgeniykrasnokutsky/ai-virtual-assistant-technology-guide-2022-3n3i" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;AI Virtual Assistant Technology Guide 2022&lt;/h2&gt;
      &lt;h3&gt;Evgeniy Krasnokutsky ・ Mar 21 '22&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#ai&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#virtual&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#avatar&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  &lt;strong&gt;Automation: A New Standard for Efficiency&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Telecommunications companies are leveraging automation to revolutionize their operations, from network management to customer service. This shift not only boosts operational efficiency but also significantly cuts down manual labor and operational costs. Automation allows for real-time network optimization and the automation of customer interactions, providing a more consistent and reliable service experience. This evolution is instrumental in accommodating the growing demands for telecommunications services, ensuring scalability and sustainability.&lt;/p&gt;

&lt;p&gt;In telecommunications, Python has emerged as a powerful tool for automating tasks, including setting up webhooks for messaging services. A &lt;a href="https://dev.to/whapicloud/creating-a-whatsapp-bot-with-python-a-step-by-step-guide-for-developer-1m9c"&gt;DEV Community guide&lt;/a&gt; on creating a WhatsApp bot with Python exemplifies this, providing code snippets and explanations on setting up APIs for enhanced messaging automation​​. This practical application demonstrates the versatility of automation in improving efficiency and responsiveness in telecommunications services.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Setting Expectations&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;While AI and automation promise to enhance efficiency and service quality, setting realistic expectations is crucial. These technologies also present challenges, including the need for substantial data for AI training and potential risks in data security and privacy. Furthermore, the automation-driven transformation in the workforce necessitates upskilling and reskilling initiatives to prepare employees for the future. Navigating these challenges requires a balanced approach, prioritizing technological advancements while ensuring ethical and responsible use  .&lt;/p&gt;




&lt;p&gt;For a more detailed exploration of these topics, consider reviewing the insights provided by these sources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adapt IT's discussion on AI's impact in telecommunications &lt;a href="https://telecoms.adaptit.tech/blog/the-impact-of-ai-in-telecommunications/#:~:text=AI%20is%20being%20used%20to,down%20on%20call%20centre%20resources" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Ericsson's insights into AI and its benefits &lt;a href="https://www.ericsson.com/en/ai" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;McKinsey's analysis on how AI is revolutionizing telco service operations &lt;a href="https://www.mckinsey.com/industries/technology-media-and-telecommunications/our-insights/how-ai-is-helping-revolutionize-telco-service-operations" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Intellias' overview of AI in telecommunications &lt;a href="https://intellias.com/ai-in-telecommunications/" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What are your thoughts on the future of AI and automation in telecommunications? Have you experienced these changes firsthand? Share your opinions and experiences in the comments below!&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;Header photo by &lt;a href="https://unsplash.com/@siderius_creativ?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash" rel="noopener noreferrer"&gt;Gerard Siderius&lt;/a&gt; on &lt;a href="https://unsplash.com/photos/a-robot-holding-a-gun-next-to-a-pile-of-rolls-of-toilet-paper-YeoSV_3Up-k?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

</description>
      <category>automation</category>
      <category>telco</category>
      <category>ai</category>
    </item>
    <item>
      <title>Why is replicability essential?</title>
      <dc:creator>Jorge Catriel Lopez</dc:creator>
      <pubDate>Tue, 05 Jan 2021 12:58:15 +0000</pubDate>
      <link>https://dev.to/catriel/replication-crisis-and-quality-control-513m</link>
      <guid>https://dev.to/catriel/replication-crisis-and-quality-control-513m</guid>
      <description>&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Introduction&lt;/li&gt;
&lt;li&gt;
Quality control in science

&lt;ul&gt;
&lt;li&gt;Bias&lt;/li&gt;
&lt;li&gt;Lost data&lt;/li&gt;
&lt;li&gt;Fraud!&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Who watches the Watchmen? A broken peer review&lt;/li&gt;

&lt;li&gt;Our work&lt;/li&gt;

&lt;li&gt;References&lt;/li&gt;

&lt;/ul&gt;




&lt;h1&gt;
  
  
  Introduction &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;Reproducibility of results is imperative for a sound research project. The replication of experiments is an essential part of scientific research in which significant theories are based on reproducible results (Staddon et. al. 2017), so failing to provide this results go against the very basis of what we are doing. &lt;strong&gt;Replication is extremely important&lt;/strong&gt;. It means that after a study is published, other scientists can then conduct the study themselves independently and come to about the same conclusions. If a study’s results can be consistently replicated by other scientists, that means the study is more likely to be valid.&lt;/p&gt;

&lt;p&gt;In academic environments, the reproducibility factor is often overlooked and scientist don't put enough effort into establishing essential environments and workflows early on in the project life-cycle. Readers are often expected to figure things out themselves from the minimal information in the methods section if they want to reproduce the results themselves.&lt;/p&gt;

&lt;h1&gt;
  
  
  Quality control in science &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;As we said, readers are often expected to figure things out themselves from the minimal information in the methods section if they want to reproduce the results themselves. Why is that? There are three causes that we've found mentioned in the literature (among others):&lt;/p&gt;

&lt;h3&gt;
  
  
  Bias &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Fierce competition, strong incentives to publish, and commercial interest have inadvertently lead to both conscious and unconscious bias in the scientific literature. And, the higher the vested interest in a field, the stronger the bias is likely to be. A major cause of low reproducibility is the &lt;strong&gt;publication bias&lt;/strong&gt; (when the outcome of an experiment or research study influences the decision whether to publish or otherwise distribute it) and the &lt;strong&gt;selection bias&lt;/strong&gt; (the sample obtained is not representative of the population intended to be analyzed). &lt;/p&gt;

&lt;p&gt;One cause for lack of replicability is that many scientific journals have historically had explicit policies against publishing replication studies (Mahoney 1985). Over 70% of editors from 79 social science journals said they preferred new studies over replications and over 90% said they would did not encourage the submission of replication studies (Neuliep &amp;amp; Crandall 1990).&lt;/p&gt;

&lt;h3&gt;
  
  
  Lost data &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;A vast amount of data is lost simply because we don’t know how to access it or is &lt;strong&gt;not free&lt;/strong&gt;. As Editor-in-Chief of "Molecular Brain", Tsuyoshi Miyakawa has handled hundres of manuscripts and has made countless editorial decisions requesting that the authors provide raw data. On his article &lt;a href="https://molecularbrain.biomedcentral.com/articles/10.1186/s13041-020-0552-2" rel="noopener noreferrer"&gt;"No raw data, no science: another possible source of the reproducibility crisis"&lt;/a&gt;, Miyakawa details how simply asking for this leads to several authors to withdraw their submissions.&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%2F2kokwxrr3l48x3225cdq.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%2F2kokwxrr3l48x3225cdq.png" alt="Flowchart of the manuscripts handled by Tsuyoshi Miyakawa" width="800" height="592"&gt;&lt;/a&gt;&lt;br&gt;
Flowchart of the manuscripts handled by Tsuyoshi Miyakawa in Molecular Brain from December 2017 to September 2019&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"With regard to the manuscripts that the authors withdrew independently, there are possible reasons for withdrawing after being asked to provide raw data.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;One possible reason is that although they actually had the raw data, the authors were not willing to gather all the raw data and upload them. It’s also possible that authors did not disclose raw data which they could use as an exclusive source for data mining to publish additional papers later. Another possible reason is that they chose journals where the disclosure of raw data is not required at the time of publication. However, the “data mining” hypothesis is unlikely for many of the authors in the cases considered here, since most of the rejected manuscripts did not contain big data that are suitable for data mining, as most of the requested data prior to peer review were images for western blotting or for tissue staining.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note that I asked not only for raw data but also for absolute p-values and corrections for multiple statistical tests; therefore, the possibility cannot be excluded that some of them did not wish to provide absolute p-values or to conduct corrections for multiple tests, though I do not think that these can be the primary reasons for the withdrawal. As for the ones that I rejected, it is technically possible that the insufficiency or mismatch between raw data and results are honest and careless mistakes."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Even if he's not able to verify the reason &lt;em&gt;why&lt;/em&gt; the authors decided to withdraw their work, he proposes that a &lt;em&gt;lack of raw data&lt;/em&gt; or &lt;em&gt;data fabrication&lt;/em&gt; is another possible cause of irreproducibility.&lt;/p&gt;

&lt;h3&gt;
  
  
  Fraud! &lt;a&gt;&lt;/a&gt;
&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%2Fcornerstonefamilyservices.org%2Fwp-content%2Fuploads%2F2015%2F07%2Frug-sweep.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%2Fcornerstonefamilyservices.org%2Fwp-content%2Fuploads%2F2015%2F07%2Frug-sweep.jpg" alt="Hiding evidence under the rug" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Fraud and questionable practices (excluding studies that didn't work, gathering more data that needed, rounding errors, etc) obviously affect the reproducibility of the study. If the work is wrong, how can you get to the same results without commiting fraud yourself?&lt;/p&gt;

&lt;h3&gt;
  
  
  Who Watches the Watchmen? A broken peer review &lt;a&gt;&lt;/a&gt;
&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%2Fi%2Focx96kq5rv8mfy3e5san.jpeg" 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%2Fi%2Focx96kq5rv8mfy3e5san.jpeg" alt="Who watches the Watchmen?" width="480" height="268"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After all, who's resposible for verifying other people's work? On &lt;a href="https://en.wikipedia.org/wiki/Scientific_Knowledge_and_Its_Social_Problems" rel="noopener noreferrer"&gt;"Scientific Knowledge and Its Social Problems"&lt;/a&gt;, author Jerome Ravetz states that it wouldn't be feasible to erect a formal system of categories of quality for a piece of work, and train a corp of experts as asessors to operate in their framework, "&lt;em&gt;for the techniques are so subtle, the appropriate criteria of adequacy and values especialized, and the materials so rapidly changing, that any fixed and formalized categories would be a blunt and obsolete instrument as soon as it were brought in to use&lt;/em&gt;". &lt;/p&gt;

&lt;p&gt;This results in the fact that &lt;strong&gt;if there are to be truly expert assesments of quality of work, they must be made by a section of those who are actually engaged upon that work&lt;/strong&gt;. In itself, this provides no guarantee whatever that proper assessments of quality will be made, or that they will be used appropriately for the maintenance of quality.&lt;/p&gt;

&lt;h1&gt;
  
  
  Our work &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;As we continue our work on our graduate thesis, we have accumulated a suite of scripts that need organization and cleaning. A basic &lt;a href="https://r-pkgs.org/index.html" rel="noopener noreferrer"&gt;R package&lt;/a&gt;, with a good project layout, will not only make our life easier, but also allows us to tackle our reproducibility problem. It also helps ensure the integrity of our data, makes it simpler to share our code with someone else, allows us to easily upload our code with our manuscript submission, and makes it easier to pick the project back up after a break.&lt;/p&gt;

&lt;p&gt;This follows from several &lt;strong&gt;tips that we have to keep in mind&lt;/strong&gt;: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For every result, &lt;strong&gt;keep track&lt;/strong&gt; of how it was produced: we are avoiding manual changes in data, everything must be modified through a script to ensure that every change is registered.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Version control&lt;/strong&gt; all scripts: we are currently using Git, and a private repository on Github.&lt;/li&gt;
&lt;li&gt;For analyses that include randomness, note underlying &lt;strong&gt;random seeds&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Always &lt;strong&gt;store raw data&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Connect&lt;/strong&gt; textual statements to underlying results: we are currently using R markdown files to write about our development and the changes we make to the data.&lt;/li&gt;
&lt;li&gt;Provide &lt;strong&gt;public access&lt;/strong&gt; to scripts, runs, and results: for now, our work and data are private, but that has to change as soon as we are done!&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  References &lt;a&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://medium.com/@happybandits/hard-problems-in-data-science-replication-dacface54f86" rel="noopener noreferrer"&gt;Hard Problems in Data Science: Replication&lt;/a&gt;&lt;br&gt;
&lt;a href="https://dataconomy.com/2017/07/10-rules-results-data-science/" rel="noopener noreferrer"&gt;10 Rules for Creating Reproducible Results in Data Science&lt;/a&gt;&lt;br&gt;
&lt;a href="https://molecularbrain.biomedcentral.com/articles/10.1186/s13041-020-0552-2" rel="noopener noreferrer"&gt;No raw data, no science: another possible source of the reproducibility crisis&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.enago.com/academy/what-can-be-done-to-fix-the-replication-crisis-in-science/" rel="noopener noreferrer"&gt;What Can Be Done to Fix the Replication Crisis in Science?&lt;/a&gt;&lt;br&gt;
&lt;a href="https://journals.sagepub.com/doi/10.1177/1745691612465253" rel="noopener noreferrer"&gt;Special Section on Replicability in Psychological Science: A Crisis of Confidence?&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;span&gt;Original cover photo by &lt;a href="https://unsplash.com/@brandablebox?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;Brandable Box&lt;/a&gt; on &lt;a href="https://unsplash.com/s/photos/package?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;

</description>
      <category>datascience</category>
      <category>machinelearning</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Discuss: What's your favourite book on Data Science?</title>
      <dc:creator>Jorge Catriel Lopez</dc:creator>
      <pubDate>Thu, 17 Sep 2020 13:58:00 +0000</pubDate>
      <link>https://dev.to/catriel/discuss-what-s-your-favourite-book-on-data-science-3a15</link>
      <guid>https://dev.to/catriel/discuss-what-s-your-favourite-book-on-data-science-3a15</guid>
      <description>&lt;p&gt;It could be for any number of reasons! Maybe it generated new opportunities for you, it taught you something valuable, or  you just enjoyed it more than any other book. So tell me: &lt;b&gt;what's your favourite book on data science?&lt;/b&gt;&lt;/p&gt;




&lt;p&gt;Cover image by &lt;a href="https://unsplash.com/@raheemsphoto" rel="noopener noreferrer"&gt;Enayet Raheem&lt;/a&gt; on &lt;a href="https://unsplash.com" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

</description>
      <category>datascience</category>
      <category>discuss</category>
      <category>books</category>
    </item>
    <item>
      <title>The Lies of Productivity Porn</title>
      <dc:creator>Jorge Catriel Lopez</dc:creator>
      <pubDate>Sat, 12 Sep 2020 00:11:48 +0000</pubDate>
      <link>https://dev.to/catriel/the-lies-of-productivity-porn-4cc6</link>
      <guid>https://dev.to/catriel/the-lies-of-productivity-porn-4cc6</guid>
      <description>&lt;p&gt;If there's something we can all agree on, it's that we would love to be more productive. Just take a look at the almost ten thousand posts published under &lt;a href="https://dev.to/t/productivity"&gt;#productivity&lt;/a&gt;, or the 13501 books on the subject on &lt;a href="https://www.goodreads.com/search?q=productivity&amp;amp;qid=" rel="noopener noreferrer"&gt;GoodReads&lt;/a&gt; (as of September 2020).&lt;/p&gt;

&lt;p&gt;We would love it, yet we aren't. Whether we find the tasks before us tedious, scary or boring, there's always something else to do. Something better. Something urgent or entertaining. Of course we know that we shouldn't, that there shouldn't be anything more important than our responsibilities. And yet, we still do it. Time and time again. &lt;/p&gt;

&lt;p&gt;We look for guidance on the subject, diving into self-help books, courses and talks. &lt;b&gt;We sit on a mountain of strategies and plans that don't amount to anything, because we are still not productive enough&lt;/b&gt;. And yet it feels good! &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%2Fi%2F6odmxosgnsr0c51r9h9a.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%2Fi%2F6odmxosgnsr0c51r9h9a.jpg" alt="Planning!" width="500" height="311"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Surely learning and planning about optimizing my agenda can't be wrong, right? Learning how to better yourself can't be unproductive! But, as you read and learn and plan about this, have you actually move forward with your tasks? Or are you spending more time thinking about your schedule than doing stuff?&lt;/p&gt;

&lt;p&gt;This is called &lt;b&gt;Productivity Porn&lt;/b&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%2Fi%2F8xxwwnudg5g8p6fn4scb.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%2Fi%2F8xxwwnudg5g8p6fn4scb.png" alt="XKCD - Time Management" width="630" height="280"&gt;&lt;/a&gt;&lt;br&gt;
Original &lt;a href="https://xkcd.com/874/" rel="noopener noreferrer"&gt;XKCD comic&lt;/a&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  What are we talking about?
&lt;/h1&gt;

&lt;p&gt;Productivity porn is just another form of procrastination. We spend (too much) time thinking about what we are gonna do, what bullet journals do we need, what new apps are out there that can help us keep track of time, and reading "Top 10 tips to avoid procrastinating (#3 will &lt;b&gt;SHOCK&lt;/b&gt; you!)". And like any other form of procrastination it leads to poorer health, more perceived stress, and fewer wellness behaviors.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;When I'm in writing mode for a novel, I get up at four a.m. and work for five to six hours. In the afternoon, I run for ten kilometers or swim for fifteen hundred meters (or do both), then I read a bit and listen to some music. I go to bed at nine p.m.&lt;br&gt;
&lt;b&gt;Haruki Murakami&lt;/b&gt;&lt;br&gt;
&lt;a href="https://jamesclear.com/daily-routines-writers" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;/blockquote&gt;

&lt;p&gt;Take a look at that, how wonderful, how inspiring. Even reading about it feels great.&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%2Fi%2Fpslg91klshyalukm1dao.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%2Fi%2Fpslg91klshyalukm1dao.png" alt="Why doesn't mine look like that?!" width="457" height="343"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So why doesn't mine look like that?!&lt;/p&gt;

&lt;p&gt;We all want to be like Murakami or whoever else you are comparing yourself to. We tend to copy their lifestyle, but sooner or later we find out it's not the right thing for us. &lt;b&gt;We are different&lt;/b&gt;. We have different lifestyle, thinking patterns, and responsibilities from them. &lt;b&gt;You should only compare yourself to you&lt;/b&gt;.&lt;/p&gt;

&lt;p&gt;Claire Major has this great article called “Productivity during a pandemic” where she talks about how the combination of events on this glorious 2020 makes it harder for people to write, even if “writing helps [them] cope with the stresses and distractions”. Add to this the (new?) peer pressure of being &lt;a href="https://www.hellomagazine.com/healthandbeauty/health-and-fitness/2020040387411/productive-things-to-do-during-lockdown/" rel="noopener noreferrer"&gt;extra&lt;/a&gt; &lt;a href="https://www.oprahmag.com/life/work-money/g25804405/how-to-be-productive/" rel="noopener noreferrer"&gt;productive&lt;/a&gt; &lt;a href="https://www.inc.com/sujan-patel/30-quick-tips-for-becoming-more-productive.html" rel="noopener noreferrer"&gt;and&lt;/a&gt; &lt;a href="https://www.youtube.com/watch?v=3_ici2VYPHM" rel="noopener noreferrer"&gt;not&lt;/a&gt; &lt;a href="https://medium.com/personal-growth-lab/4-ways-to-be-10x-more-productive-in-2020-fd6ccddc0986" rel="noopener noreferrer"&gt;waste&lt;/a&gt; &lt;a href="https://bestlifeonline.com/be-more-productive-new-year/" rel="noopener noreferrer"&gt;a&lt;/a&gt; &lt;a href="https://www.forbes.com/sites/barnabylashbrooke/2019/12/23/30-resolve-to-be-more-productive-in-2020-these-apps-are-already-helping/" rel="noopener noreferrer"&gt;single&lt;/a&gt; &lt;a href="https://www.healthfitnessrevolution.com/10-tips-for-being-more-productive-while-social-distancing/" rel="noopener noreferrer"&gt;moment&lt;/a&gt;, and your anxiety levels will go through the roof!&lt;/p&gt;

&lt;p&gt;(And did you even consider "&lt;a href="https://www.theguardian.com/us-news/2020/apr/24/productivity-in-coronavirus-lockdown" rel="noopener noreferrer"&gt;who is this ‘hustle culture' actually benefiting?&lt;/a&gt;")&lt;/p&gt;

&lt;h1&gt;
  
  
  Caught in a trap, you can't walk out (yet)
&lt;/h1&gt;

&lt;p&gt;&lt;b&gt;Is there a way out?&lt;/b&gt; Well, it's a tricky subject. Can I really say yes without providing an answer that falls under the porn label?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Productivity porn betrays personal insecurity. The most productive people I know don't read these books, they don't watch these videos, they don't try a new app every month. They are far too busy getting things done to read Getting Things Done. But what they've also come to accept is that &lt;b&gt;working hard is indeed, just hard work. There's no trick to it&lt;/b&gt;.&lt;br&gt;
&lt;b&gt;&lt;a href="https://medium.com/thinking-about-thinking/the-trap-of-productivity-porn-7173d1cc6f95" rel="noopener noreferrer"&gt;The Trap of Productivity Porn - Jamesbedell&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We don't spend &lt;b&gt;enough time doing&lt;/b&gt; the things we are avoiding. Well, duh! that's what got us here on the first place! But it really is that simple. There are no magic words that will make it all better. Its just work. &lt;/p&gt;

&lt;p&gt;But that's not what this article was about: I'm not here to give you the magic answer. The point is that we don't even realize we are not being productive, because passive thinking can give us the &lt;b&gt;&lt;a href="https://nesslabs.com/illusion-of-productivity" rel="noopener noreferrer"&gt;illusion of productivity&lt;/a&gt;&lt;/b&gt; and won't even help us to build productive habits. That's it. Not a solution to the base problem, just a heads up: hey, this is not as productive as you may think it is.&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;b&gt; What about you? What has been your experience like? I want to hear about it!&lt;/b&gt;
&lt;/h1&gt;




&lt;h2&gt;
  
  
  More about this
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://community.chronicle.com/news/2326-why-you-should-ignore-all-that-coronavirus-inspired-productivity-pressure" rel="noopener noreferrer"&gt;Why You Should Ignore All That Coronavirus-Inspired Productivity Pressure&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.bitchesgetriches.com/i-am-so-over-productivity-porn/" rel="noopener noreferrer"&gt;I Am So Over Productivity Porn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nesslabs.com/productivity-porn" rel="noopener noreferrer"&gt;From productivity porn to mindful productivity&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;&lt;span&gt;Cover photo by &lt;a href="https://unsplash.com/@carlheyerdahl" rel="noopener noreferrer"&gt;Carl Heyerdahl&lt;/a&gt; on &lt;a href="https://unsplash.com/" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>career</category>
      <category>watercooler</category>
    </item>
    <item>
      <title>Git, but not dumb down: Local branches</title>
      <dc:creator>Jorge Catriel Lopez</dc:creator>
      <pubDate>Thu, 03 Sep 2020 11:34:03 +0000</pubDate>
      <link>https://dev.to/catriel/git-but-not-dumb-down-branches-i6l</link>
      <guid>https://dev.to/catriel/git-but-not-dumb-down-branches-i6l</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;Welcome back! Be sure to check out the first past of this  series before you jump into this one.&lt;/p&gt;

&lt;p&gt;Let's start with a brief reminder of the last post:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;To summarize&lt;/strong&gt;: every time we stage a file, a blob object is created, storing the content of each file. Its name is the SHA-1 of the file's content and it’s stored under &lt;code&gt;.git/objects&lt;/code&gt;. Whenever we commit the changes to the repository, we create two new kinds of files: a tree, which stores more information about the files changed under it and a commit, with all the information about who saved the snapshot and why (the message!).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We took a quick look at the &lt;code&gt;.git/objects&lt;/code&gt; folder in your repository in our last post. Today, we are going to look at &lt;code&gt;.git/refs&lt;/code&gt; and the concept of &lt;strong&gt;local branches&lt;/strong&gt;. &lt;/p&gt;

&lt;h2&gt;
  
  
  Branching
&lt;/h2&gt;

&lt;p&gt;First, we need a new repository (practice makes perfect):&lt;br&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%2Fi%2Fsqfzh6m97kq6tkm12fqv.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%2Fi%2Fsqfzh6m97kq6tkm12fqv.png" alt="git init" width="800" height="287"&gt;&lt;/a&gt;&lt;br&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%2Fi%2Fnqvpdyr6ng8hfhxofgn5.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%2Fi%2Fnqvpdyr6ng8hfhxofgn5.png" alt="git add new file" width="800" height="312"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now that we have a working repository, we can introduce a little bit of theory. A branch in Git is simply a lightweight movable &lt;strong&gt;pointer&lt;/strong&gt; to one of your commits. The default branch name in Git is &lt;em&gt;master&lt;/em&gt;. As you start making commits, you’re given a master branch that points to the last commit you made. Every time you commit, the master branch pointer moves forward automatically.&lt;/p&gt;

&lt;p&gt;Internally, a branch is just a file in your &lt;code&gt;.git/refs/&lt;/code&gt; folder that contains the SHA-1 id of a commit. Before we commited the &lt;em&gt;new_file&lt;/em&gt;, this was the structure under &lt;code&gt;.git&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%2Fi%2F643p77ixhw4w7k1fpvvd.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%2Fi%2F643p77ixhw4w7k1fpvvd.png" alt="tree -a .git" width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And this happened after the commit:&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%2Fi%2Fomlf366z3m42xv0eh5g8.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%2Fi%2Fomlf366z3m42xv0eh5g8.png" alt="tree -a .git/refs" width="800" height="381"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Can we take a loot at that &lt;code&gt;master&lt;/code&gt; file? Of course!&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%2Fi%2Fccjasdq250izhyer9gvo.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%2Fi%2Fccjasdq250izhyer9gvo.png" alt="cat heads/master" width="800" height="266"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If we take a look at the log, just to be sure, we can see that it is in fact the id of the first commit that we made.  &lt;/p&gt;

&lt;p&gt;To get some content in our repository, and to check that what we just said really works, let's add another file:&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%2Fi%2Fvfr493p9wan0cnrhbz15.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%2Fi%2Fvfr493p9wan0cnrhbz15.png" alt="git add second file" width="800" height="293"&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%2Fi%2F1z5658q1imk4gmzv05qw.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%2Fi%2F1z5658q1imk4gmzv05qw.png" alt="git log 2" width="800" height="512"&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%2Fi%2Fvatzm14lw57n0txwtzdz.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%2Fi%2Fvatzm14lw57n0txwtzdz.png" alt="cat master 2" width="800" height="266"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  HEAD
&lt;/h3&gt;

&lt;p&gt;We have confirmed that the pointer "moves" whenever we make a commit, so let's bring another branch into this:&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%2Fi%2F1rm8b28ysvfm8wfjy7qi.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%2Fi%2F1rm8b28ysvfm8wfjy7qi.png" alt="git branch new_branch" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We used the &lt;code&gt;git branch&lt;/code&gt; &lt;a href="https://git-scm.com/docs/git-branch" rel="noopener noreferrer"&gt;command&lt;/a&gt; to create a new branch. Can we just add commits to 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%2Fi%2Faqc6nfo0xqx6amh0b2az.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%2Fi%2Faqc6nfo0xqx6amh0b2az.png" alt="git add failed file" width="800" height="264"&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%2Fi%2Fvhh5dx5ydffs2b5w0cw4.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%2Fi%2Fvhh5dx5ydffs2b5w0cw4.png" alt="git log failed file" width="800" height="661"&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%2Fi%2F1qsyj3yf2vp8mio6i1bs.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%2Fi%2F1qsyj3yf2vp8mio6i1bs.png" alt="cat master 3" width="800" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What happened there?&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;We got a new file called &lt;em&gt;new_branch&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;We made a new commit that was supposed to be on the new branch, but!&lt;/li&gt;
&lt;li&gt;We found out that both new_branch and master point to this last commit.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Why did &lt;em&gt;master&lt;/em&gt; update? Creating a new branch doesn't mean you are working on it. Git utilizes a special pointer called &lt;strong&gt;HEAD&lt;/strong&gt; to know in which branch you are working on. If we take a look at it, before we switched branches&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%2Fi%2F1psmnk9hhu8cyk9ix0hf.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%2Fi%2F1psmnk9hhu8cyk9ix0hf.png" alt="head before checkout" width="800" height="321"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;we can see that it contains a reference to another reference, in this case your &lt;strong&gt;master&lt;/strong&gt; ref file. We'll use the &lt;code&gt;git checkout&lt;/code&gt; &lt;a href="https://git-scm.com/docs/git-checkout" rel="noopener noreferrer"&gt;command&lt;/a&gt; to switch branches and add a new file to test 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%2Fi%2Fi9fglq9w99ipxs3c87wm.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%2Fi%2Fi9fglq9w99ipxs3c87wm.png" alt="git add good file" width="800" height="336"&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%2Fi%2F259661qlyxcal1rca3mf.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%2Fi%2F259661qlyxcal1rca3mf.png" alt="head after checkout" width="800" height="321"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;HEAD updated to the new branch after &lt;code&gt;checkout&lt;/code&gt;. You can look at this on your log too (HEAD -&amp;gt; &lt;em&gt;current_branch&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%2Fi%2Fwday1i5oticny83mvkdl.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%2Fi%2Fwday1i5oticny83mvkdl.png" alt="git log after good file" width="800" height="631"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Merge
&lt;/h2&gt;

&lt;p&gt;After we looked at how we can diverge our work, we'll take a look at &lt;strong&gt;merging&lt;/strong&gt;. The &lt;code&gt;git merge new_branch&lt;/code&gt; command will replay the changes made on the &lt;em&gt;new_branch&lt;/em&gt; branch since it diverged from &lt;em&gt;master&lt;/em&gt;  until its current commit on top of &lt;em&gt;master&lt;/em&gt;, and record the result in a new commit. So what happened to our ref files?&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%2Fi%2F9mpflc4l8u3s81ajzkn6.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%2Fi%2F9mpflc4l8u3s81ajzkn6.png" alt="git merge" width="800" height="917"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now the both point to the same commit, and HEAD still points to &lt;em&gt;master&lt;/em&gt; from the checkout. If we continue working on this branch, we can see in our log that &lt;em&gt;new_branch&lt;/em&gt; will be left behind.&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%2Fi%2Fbe7h4fz250a1mah2znmm.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%2Fi%2Fbe7h4fz250a1mah2znmm.png" alt="final image" width="800" height="1090"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Workflow
&lt;/h2&gt;

&lt;p&gt;Now that we introduced the basics of branching, we'll take a look at a couple of git workflows. First, you must know that &lt;strong&gt;there is no standardized process on how to interact with Git&lt;/strong&gt;. You can commit after each new word on a file, or make and merge branches for every file, for all Git cares. &lt;strong&gt;Use it however works for you and your team&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Feature branch
&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%2Fi%2Frj78nmkdjcxrxibv9tiv.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%2Fi%2Frj78nmkdjcxrxibv9tiv.png" alt="feature branch worflow" width="800" height="458"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;The core idea behind the Feature Branch Workflow is that all feature development should take place in a dedicated branch instead of the master branch. This encapsulation makes it easy for multiple developers to work on a particular feature without disturbing the main codebase.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;From Atlassian's &lt;a href="https://www.atlassian.com/git/tutorials/comparing-workflows/feature-branch-workflow" rel="noopener noreferrer"&gt;Git Feature Branch Workflow&lt;/a&gt;&lt;/p&gt;


&lt;/blockquote&gt;

&lt;p&gt;Its just that simple! Whenever you need to add some feature to your project, you checkout a new branch, commit anything that you need there, and then &lt;em&gt;merge&lt;/em&gt; it into the main branch.&lt;/p&gt;

&lt;h3&gt;
  
  
  Gitflow
&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%2Fikeu4nka2tn8co40otmt.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%2Fikeu4nka2tn8co40otmt.png" alt="Gitflow" width="800" height="1060"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This workflow is the idea of &lt;a href="https://nvie.com/posts/a-successful-git-branching-model/" rel="noopener noreferrer"&gt;Vincent Driessen&lt;/a&gt; on 2010. You really should read that post, as its really nicely explained!&lt;/p&gt;

&lt;p&gt;Gitflow doesn’t add any new concepts or commands beyond what’s required for the previous workflow. It assigns very specific &lt;strong&gt;roles&lt;/strong&gt; to different branches and defines how and &lt;strong&gt;when they should interact&lt;/strong&gt;. In addition to feature branches, it uses individual branches for preparing, maintaining, and recording releases.&lt;/p&gt;

&lt;h1&gt;
  
  
  Future notes
&lt;/h1&gt;

&lt;p&gt;After this post, the plan is to continue the branch topic with remote branches, reset, and rebasing.&lt;/p&gt;

&lt;p&gt;I'm interested to know what do you think, if you have any comment or suggestion! Thanks for stopping by, see you again soon!&lt;/p&gt;

</description>
      <category>git</category>
      <category>github</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Git, but not dumb down: Introduction</title>
      <dc:creator>Jorge Catriel Lopez</dc:creator>
      <pubDate>Fri, 28 Aug 2020 23:28:00 +0000</pubDate>
      <link>https://dev.to/catriel/git-but-not-dumb-down-3cpf</link>
      <guid>https://dev.to/catriel/git-but-not-dumb-down-3cpf</guid>
      <description>&lt;h2&gt;
  
  
  Motivation
&lt;/h2&gt;

&lt;p&gt;Tutorials on git are present &lt;a href="https://dev.to/search?q=git"&gt;everywhere&lt;/a&gt;. So, why write another? There’s a trend I’m not a big fan of: a lot of people like to divide the content between “basic” and “advanced” git.&lt;/p&gt;

&lt;p&gt;Listen, you don’t have to know how a motor works to drive a car. I know. But sooner rather than later, something is gonna break. &lt;strong&gt;And if you don’t know how the thing works, other than how to use some basic commands, odds are that you are the one who’s gonna break it&lt;/strong&gt; and will get stuck waiting for A Professional to show up.&lt;/p&gt;

&lt;p&gt;This post is meant to explain Git in a clean and concise way, so &lt;strong&gt;you can be The Professional&lt;/strong&gt;. I’m not going to try to explain the advantages or disadvantages of using git or any other VCS. I’m also not gonna divide the content into “basic” and “advanced”. To truly understand git, you must look below the surface, at the internals.&lt;/p&gt;

&lt;p&gt;If you want to learn about why Git is such a great tool, Attlasian wrote &lt;a href="https://www.atlassian.com/git/tutorials/why-git" rel="noopener noreferrer"&gt;this&lt;/a&gt; fantastic article about it.&lt;/p&gt;

&lt;p&gt;If you want to learn about the implementation of Git, the source code is available &lt;a href="https://github.com/git/git" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;There’s also this great book about it, &lt;a href="https://git-scm.com/book/en/v2" rel="noopener noreferrer"&gt;Pro Git&lt;/a&gt;, that I can’t recommend enough, and &lt;a href="https://dev.to/unseenwizzard/learn-git-concepts-not-commands-4gjc"&gt;this post&lt;/a&gt; by &lt;a href="https://dev.to/unseenwizzard"&gt;Nico Riedmann&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;Let’s start with the basics. We’ll create a new repository on any folder on your computer, by opening up the terminal on it and executing the command &lt;code&gt;git init&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%2Fi%2Ffu4yato00bf7sn8lqlb1.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%2Fi%2Ffu4yato00bf7sn8lqlb1.png" alt="git init" width="800" height="263"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When you create a new repository into a folder in your computer, your &lt;em&gt;workspace&lt;/em&gt; is divided in three main areas:&lt;/p&gt;

&lt;h3&gt;
  
  
  Working directory
&lt;/h3&gt;

&lt;p&gt;The folder itself, in which you will create, modify, and delete files.&lt;/p&gt;

&lt;h3&gt;
  
  
  Stage area or Index
&lt;/h3&gt;

&lt;p&gt;All the changes tracked by git will reflect in the &lt;code&gt;.git&lt;/code&gt; directory that the &lt;code&gt;git init&lt;/code&gt; command created, even before you commit them. You can use this index to build up a set of changes that you want to commit together. When you create a save a snapshot, you save what is currently in the index, &lt;strong&gt;not what is in your working directory&lt;/strong&gt;. How do we do this?&lt;/p&gt;

&lt;p&gt;After making any changes to the working tree, and before running the &lt;code&gt;commit&lt;/code&gt; command, you must use the &lt;code&gt;add&lt;/code&gt; command to add any new or modified files to the index.&lt;/p&gt;

&lt;p&gt;This command can be performed multiple times before a commit. It only adds the content of the specified file(s) at the time the add command is run; if you want subsequent changes included in the next commit, then you must run &lt;code&gt;git add&lt;/code&gt; again to add the new content to the index.&lt;/p&gt;

&lt;h3&gt;
  
  
  Repository
&lt;/h3&gt;

&lt;p&gt;The (local) repository is everything in your &lt;code&gt;.git&lt;/code&gt; directory. Mainly what you will see in your repository are all of your snapshots of the project.&lt;/p&gt;




&lt;p&gt;In a few paragraphs, we can see the &lt;strong&gt;main git workflow&lt;/strong&gt; in action: you modify a file, prepare the changes to be saved, and save the snapshot (the current version of your project) to the repository.&lt;/p&gt;

&lt;p&gt;As we said, the &lt;code&gt;git init&lt;/code&gt; command has created a new folder &lt;code&gt;.git&lt;/code&gt; in our working directory. What's inside?&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%2Fi%2Fi7pa38n994vy820aw6j1.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%2Fi%2Fi7pa38n994vy820aw6j1.png" alt="tree output" width="800" height="1308"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As it turns out, a lot of things! We'll look at them as we need them. For now, we need content. We'll create a new file, called &lt;code&gt;new_file.txt&lt;/code&gt; and insert some text to 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%2Fi%2Fxsfdese6k9h4sxs7qb2g.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%2Fi%2Fxsfdese6k9h4sxs7qb2g.png" alt="echo" width="800" height="214"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;new_file&lt;/code&gt; file has been &lt;em&gt;modified&lt;/em&gt;, but its not yet &lt;em&gt;staged&lt;/em&gt;. We can see this if we take a look at 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%2Fi%2Fqqgh1lyfxbosu0bnkicn.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%2Fi%2Fqqgh1lyfxbosu0bnkicn.png" alt="git status" width="800" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Git knows of the existence of the file in the working directory, but &lt;strong&gt;it is not tracking any change on it&lt;/strong&gt;. We can make it do so by &lt;strong&gt;staging&lt;/strong&gt; 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%2Fi%2Fufw3h1gubx9l66hu7j3t.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%2Fi%2Fufw3h1gubx9l66hu7j3t.png" alt="git add" width="800" height="278"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Does this mean that git has stored the file in its history? Not yet. If we take a look at the output of &lt;code&gt;git log&lt;/code&gt;, which shows all the &lt;strong&gt;commits&lt;/strong&gt; made, we see that there's no snapshot of the project stored yet.&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%2Fi%2Ft6bfuwqlewgurv1x5qbs.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%2Fi%2Ft6bfuwqlewgurv1x5qbs.png" alt="git log" width="800" height="287"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But! Changes have been made to the &lt;code&gt;.git&lt;/code&gt; folder:&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%2Fi%2Fxl1l06b1d89u3pp6yp5x.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%2Fi%2Fxl1l06b1d89u3pp6yp5x.png" alt="tree after git add" width="800" height="1148"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We have a new folder and file under &lt;code&gt;.git/objects/&lt;/code&gt;, with a long and weird name. We only have one file, so this must be the snapshot, right? And if we look at what's inside, we should get a single sentence ("This is a new file"):&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%2Fi%2Fg0ftrzw4z4o7i0nv9m5a.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%2Fi%2Fg0ftrzw4z4o7i0nv9m5a.png" alt="cat blob file" width="800" height="198"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Clearly, it didn't work, as that is a binary file. And it gets worse! Look at what happens when we save the snapshot of our project to the 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%2Fi%2Fzp25cv90qxtncl2ojr2b.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%2Fi%2Fzp25cv90qxtncl2ojr2b.png" alt="git pre commit" width="800" height="564"&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%2Fi%2Fj57e2lgepctzoxaiz607.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%2Fi%2Fj57e2lgepctzoxaiz607.png" alt="git commit" width="800" height="319"&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%2Fi%2Fx1q509pahrm4no4e6tfv.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%2Fi%2Fx1q509pahrm4no4e6tfv.png" alt="git post commit" width="800" height="1515"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The plot thickens!&lt;/em&gt; We have two new folders and files under &lt;code&gt;.git/objects/&lt;/code&gt; now. Let's take a moment to see what's going on here.&lt;/p&gt;

&lt;h2&gt;
  
  
  Git internals: How is this data saved?
&lt;/h2&gt;

&lt;p&gt;After we added the &lt;code&gt;new_file&lt;/code&gt; object to the repository, Git created a file under the &lt;code&gt;objects&lt;/code&gt; folder with a weird name. This file is named with the &lt;a href="https://es.wikipedia.org/wiki/Secure_Hash_Algorithm" rel="noopener noreferrer"&gt;SHA-1&lt;/a&gt; checksum of the content and its header. The subdirectory is named with the first 2 characters of the SHA-1, and the filename is the remaining 38 characters.&lt;/p&gt;

&lt;p&gt;Can we look at what's inside? Of course. Git has the &lt;code&gt;cat-file&lt;/code&gt; command to inspect 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%2Fi%2F9c4xkthx9h2ff5gwhrwj.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%2Fi%2F9c4xkthx9h2ff5gwhrwj.png" alt="git cat-file -p blob" width="800" height="295"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Great! So &lt;strong&gt;the CONTENT of the file is stored in the repository&lt;/strong&gt;. This is important, as a lot of people think that git stores only the diff between files.&lt;/p&gt;

&lt;p&gt;So, let's say I create a repository with a 50gb in it. And let's say that I modified it three times. Does this mean that I'll have a 150gb size repository? &lt;strong&gt;No&lt;/strong&gt;. Git has a compression layer that we could talk about later.&lt;/p&gt;

&lt;p&gt;Ok, git stored the &lt;em&gt;content&lt;/em&gt; of &lt;code&gt;new_file&lt;/code&gt;, but just that and nothing else, not even the name of it!. What about the other two files that were created after the commit?&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%2Fi%2F6dz320072d5gbmpvp0oh.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%2Fi%2F6dz320072d5gbmpvp0oh.png" alt="git cat-file -p tree" width="800" height="254"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The repository’s content is stored as &lt;strong&gt;tree&lt;/strong&gt; and &lt;strong&gt;blob&lt;/strong&gt; objects, with trees corresponding to directory entries and blobs corresponding more or less to file contents. A single tree object contains one or more entries, each of which is the SHA-1 hash of a blob or subtree with its associated mode, type, and filename.&lt;/p&gt;

&lt;p&gt;Now we have that extra information we needed about the file. But, git is a collaboration tool, and as in any collaboration tool, we need some information about the user. We don’t have any information about who saved the snapshots, when they were saved, or why they were saved, yet. This is the basic information that the &lt;strong&gt;commit&lt;/strong&gt; object stores for you.&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%2Fi%2Fhyhii78alnd1ddhlnt23.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%2Fi%2Fhyhii78alnd1ddhlnt23.png" alt="git cat-file -p commit" width="800" height="322"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To summarize: every time we stage a file, a &lt;strong&gt;blob&lt;/strong&gt; object is created, storing the content of each file. Its name is the SHA-1 of the file's content and it’s stored under &lt;code&gt;.git/objects&lt;/code&gt;. Whenever we commit the changes to the repository, we create two new kinds of files: a &lt;strong&gt;tree&lt;/strong&gt;, which stores more information about the files changed under it and a &lt;strong&gt;commit&lt;/strong&gt;, with all the information about who saved the snapshot and why (the message!).&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%2Fi%2Fds2s5j9tv74zzw1vxhk6.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%2Fi%2Fds2s5j9tv74zzw1vxhk6.png" alt="git objects" width="372" height="432"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s next?
&lt;/h2&gt;

&lt;p&gt;We’ll stop here for now, and we’ll get into &lt;strong&gt;branches&lt;/strong&gt; on the next post. Let me know of any suggestions you've got, or if I made any mistake, as this is my first post. I hope you enjoyed it!&lt;/p&gt;




&lt;p&gt;Original cover photo by &lt;a href="https://unsplash.com/@emilep" rel="noopener noreferrer"&gt;Emile Perron&lt;/a&gt; on &lt;a href="https://unsplash.com/" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>git</category>
      <category>github</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
