# Setup Git for a Flutter Project with Firebase inside a Public Repo

As a developer, maintaining a public repository for your Flutter project can be a great way to share your work with community and get feedback and contributions from others.

But we want to ensure that sensitive data such as :

* Firebase configuration files
    
* API keys
    
* Authentication tokens
    
* Database Credentials
    
* Storage Credentials
    

So let's see the process to do that.

## Step 1: Initial Flutter Project with Firebase

Go ahead and create a Flutter project and connect it to Firebase. For a step by step description. [Read the following article on connecting your Flutter project to your Firebase](https://harishkunchala.com/flutter-on-fire-connect-your-app-to-firebase-now)

I am creating an open source app that I want to use for my own car maintenance. As you can see I am supporting all the platforms.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1715034712589/24200681-1ed6-4512-aa98-082442a7e8fe.png align="center")

Finally My App has been connected to Firebase:

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1715035104515/4149893f-437f-410e-9d2d-f882d71a4eed.png align="center")

## Step 2: Setup Git and `.gitignore`

To start, you'll need to create a new Git repository for your Flutter project.<mark>You can do this by opening a terminal or command prompt and navigating to the root directory of your project.</mark> Then, run the following command to initialize a new Git repository:

```bash
git init
```

Once git has been initialized. We need to check if `.gitignore` file has been created.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1715035779125/c9598935-c12d-4f15-9736-277b947f6dd5.png align="center")

### Replace Default `.gitignore`

Since our `.gitignore` files has been created. Let's go ahead and modify it to ignore sensitive files.

This is our initial `.gitignore` :

```bash
# Miscellaneous
*.class
*.log
*.pyc
*.swp
.DS_Store
.atom/
.buildlog/
.history
.svn/
migrate_working_dir/

# IntelliJ related
*.iml
*.ipr
*.iws
.idea/

# The .vscode folder contains launch configuration and tasks you configure in
# VS Code which you may wish to be included in version control, so this line
# is commented out by default.
#.vscode/

# Flutter/Dart/Pub related
**/doc/api/
**/ios/Flutter/.last_build_id
.dart_tool/
.flutter-plugins
.flutter-plugins-dependencies
.pub-cache/
.pub/
/build/

# Symbolication related
app.*.symbols

# Obfuscation related
app.*.map.json

# Android Studio will place build artifacts here
/android/app/debug
/android/app/profile
/android/app/release
```

Go ahead and replace it with the one available in the following gist:

[https://gist.github.com/khkred/54baf727b3ac8f9a2210812d88250ba7](https://gist.github.com/khkred/54baf727b3ac8f9a2210812d88250ba7)

After replacement this is my final gist:

```bash
# Do not remove or rename entries in this file, only add new ones
# See https://github.com/flutter/flutter/issues/128635 for more context.

# Miscellaneous
*.class
*.lock
*.log
*.pyc
*.swp
.DS_Store
.atom/
.buildlog/
.history
.svn/

# IntelliJ related
*.iml
*.ipr
*.iws
.idea/

# Visual Studio Code related
.classpath
.project
.settings/
.vscode/*

# Flutter repo-specific
/bin/cache/
/bin/internal/bootstrap.bat
/bin/internal/bootstrap.sh
/bin/mingit/
/dev/benchmarks/mega_gallery/
/dev/bots/.recipe_deps
/dev/bots/android_tools/
/dev/devicelab/ABresults*.json
/dev/docs/doc/
/dev/docs/api_docs.zip
/dev/docs/flutter.docs.zip
/dev/docs/lib/
/dev/docs/pubspec.yaml
/dev/integration_tests/**/xcuserdata
/dev/integration_tests/**/Pods
/packages/flutter/coverage/
version
analysis_benchmark.json

# packages file containing multi-root paths
.packages.generated

# Flutter/Dart/Pub related
**/doc/api/
.dart_tool/
.flutter-plugins
.flutter-plugins-dependencies
**/generated_plugin_registrant.dart
.packages
.pub-preload-cache/
.pub-cache/
.pub/
build/
flutter_*.png
linked_*.ds
unlinked.ds
unlinked_spec.ds

# Android related
**/android/**/gradle-wrapper.jar
.gradle/
**/android/captures/
**/android/gradlew
**/android/gradlew.bat
**/android/local.properties
**/android/**/GeneratedPluginRegistrant.java
**/android/key.properties
*.jks
 # Firebase config file for Android
**/android/google-services.json 

# iOS/XCode related
**/ios/**/*.mode1v3
**/ios/**/*.mode2v3
**/ios/**/*.moved-aside
**/ios/**/*.pbxuser
**/ios/**/*.perspectivev3
**/ios/**/*sync/
**/ios/**/.sconsign.dblite
**/ios/**/.tags*
**/ios/**/.vagrant/
**/ios/**/DerivedData/
**/ios/**/Icon?
**/ios/**/Pods/
**/ios/**/.symlinks/
**/ios/**/profile
**/ios/**/xcuserdata
**/ios/.generated/
**/ios/Flutter/.last_build_id
**/ios/Flutter/App.framework
**/ios/Flutter/Flutter.framework
**/ios/Flutter/Flutter.podspec
**/ios/Flutter/Generated.xcconfig
**/ios/Flutter/ephemeral
**/ios/Flutter/app.flx
**/ios/Flutter/app.zip
**/ios/Flutter/flutter_assets/
**/ios/Flutter/flutter_export_environment.sh
**/ios/ServiceDefinitions.json
**/ios/Runner/GeneratedPluginRegistrant.*
# Firebase config file
**/ios/GoogleService-Info.plist  

# macOS
**/Flutter/ephemeral/
**/Pods/
**/macos/Flutter/GeneratedPluginRegistrant.swift
**/macos/Flutter/ephemeral
# Firebase config file for MAC OS
**/macos/Runner/GoogleService-Info.plist  
**/xcuserdata/

# Firebase Configuration
/lib/firebase_options.dart

# Windows
**/windows/flutter/generated_plugin_registrant.cc
**/windows/flutter/generated_plugin_registrant.h
**/windows/flutter/generated_plugins.cmake
# Firebase config file for Windows
**/windows/google-services.json  

# Linux
**/linux/flutter/generated_plugin_registrant.cc
**/linux/flutter/generated_plugin_registrant.h
**/linux/flutter/generated_plugins.cmake

# Web
**/web/keys.json  # Example sensitive data for web

# Coverage
coverage/

# Symbols
app.*.symbols

# Exceptions to above rules.
!**/ios/**/default.mode1v3
!**/ios/**/default.mode2v3
!**/ios/**/default.pbxuser
!**/ios/**/default.perspectivev3
!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
!/dev/ci/**/Gemfile.lock
!.vscode/settings.json
```

### Setup files into our git step by step

The first thing we want to do is add our `.gitignore` as this would let git know which files it'll have to ignore once we commit

```bash
git add .gitignore
git commit -m "Add initial .gitignore"
```

Next, you'll need to add your Flutter project files to the Git repository. You can do this by running the following command:

```bash
git add .
```

Once you've added your files to the repository, you'll need to commit them. To do this, run the following command:

```bash
git commit -m "Initial commit"
```

This will create a new commit with a meaningful commit message.

## Step 3: Publish your initial app on Github:

### Through Android Studio:

If you are using Android Studio. You can share it immediately using the following command:

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1715036626175/ce3cf69c-9092-4d35-a255-b3ef17fb50d0.png align="center")

### Through Github:

Create a new public repo in Github:

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1715036746546/b941c25a-3151-4d53-a43c-847cc7810cdc.png align="center")

Finally you can connect your local repo to Github with the following command:

```bash
git remote add origin git@github.com:khkred/kaida.git
git branch -M main
git push -u origin main
```

<mark>Make sure to replace </mark> `git remote add origin git@github.com:khkred/kaida.git` <mark> with your own public repo.</mark>

There you go you finally have a public repo with all of the gitignore files added.
