title: Is it not possible to create blog with content taken only from Github?
body: <p>I am struggling with this for long time. 
  Using <code>gatsby-source-git</code> plugin I can get all markdown content from the repository using <code>allMarkdownRemark</code> in graphQL query - the <code>allFile</code> directive is not necessary.</p>
  
  <p>But there are problems with Gatsby approach. In my config I have:</p>
  
  <pre><code>{
        resolve: 'gatsby-source-filesystem',
        options: {
          name: 'markdown-pages',
          path: `${__dirname}/mdsource`,
        },
      },
      {
        resolve: 'gatsby-source-git',
        options: {
          name: 'cookie-content',
          remote: 'lets say for now it is some private repo on github',
          branch: 'main',
          patterns: ['en/**', 'images/**'],
        },
      },
  </code></pre>
  
  <ol>
  <li>I cannot replace 'mdsource' for '.cache/gatsby-source-git/' because when <code>gatsby develop</code> is run such path not exist yet.</li>
  <li>When I remove reference to <code>gatsby-source-filesystem</code> completely from <code>gatsby-config.js</code> everything crashes on build and graphQL nodes are not properly read.</li>
  <li>It is not clearly stated in documentation of gatsby-source plugins but it looks they are not stand-alone plugins and require <code>gatsby-source-filesystem</code> to run.</li>
  <li>Using just <code>gatsby-source-filesystem</code> without any additional configuration also broke things.</li>
  <li>All the files from different sources are imported into one huge graphQl tree and there is no way to distinct in AllMarkdownRemark which markdown file comes from where.</li>
  </ol>
  
  <p>In my <code>gatsby-node.js</code> file I have function for creating slugs:</p>
  
  <pre><code>exports.onCreateNode = ({ node, getNode, actions }) =&gt; {
      const { createNodeField } = actions;
          if (node.internal.type === 'MarkdownRemark') {
              const slug = createFilePath({ node, getNode, basePath: 'mdsource' });
              createNodeField({
                      node,
                      name: 'slug',
                      value: slug,
              });
          }
  };
  </code></pre>
  
  <p>After I added github repository as additional source I see this function is wrong but I don't know should I delete it completely or modify.</p>
  
  <p>So to summarize: 
  - how to have a blog where all the content data are fetched from Github only?
  - what is the difference between creating Page,creating File, and creating Markdown node? Seems like all the content of all pages existing as values in json, so there is no need to have file physically on disk.</p>