Central hub of my journey at 42 β all milestones, all projects, one universe.
Quick Start β’ Milestones β’ Partial Clone β’ Submodules β’ Contributing β’ License
All my work and notes are also curated here: ππ½ Community Hub: https://puzzled-basil-cc8.notion.site/Universe42-18352b5682188018accae57b55410ea8 ππ½ ./Utils42/my_notes
βΉοΈ To view these notes:
Open Obsidian and set./Utils42/my_notesas your vault directory.
This setup works best on Linux distributions. For Windows, use WSL or a Linux VM (e.g., Ubuntu) for full compatibility.
Cross-platform use is possible, but may require advanced tweaks.
Universe42 gathers all projects developed during my 42 curriculum. Each project lives as a Git submodule, organized by milestone from Milestone 0 to Milestone 6. Browse projects independently, clone everything, or even fetch a single file β your choice.
- Languages and domains: C, algorithms, data structures, Unix, systems programming, networking, graphics, and more.
- Goal: show progression from fundamentals to advanced software engineering.
- Milestone_0/, Milestone_1/, ..., Milestone_6/
- Utils42/ (e.g., bash_command/)
- docs/
- LICENSE, README.md, .gitmodules
Note: Each project is a submodule. See Quick Start and Submodule sections for proper cloning.
Use this if you want the whole repository with all submodules:
# Fresh clone with all submodules
git clone --recursive -j$(nproc) https://github.com/LESdylan/Universe42.git
cd Universe42
# If you cloned without --recurse-submodules, run:
git submodule update --init --recursiveKeep submodules synced to their tracked branches:
git submodule update --remote --mergeDownload a single file without cloning (example):
# Replace username/repo/path/file as needed
wget https://raw.githubusercontent.com/LESdylan/Universe42/main/Utils42/bash_command/backup.sh -O backup.shClone only what you need (faster, lighter):
git clone --filter=blob:none --sparse https://github.com/LESdylan/Universe42.git
cd Universe42
# Select only the project(s) you want, e.g., Milestone_0/ft_printf
git sparse-checkout set Milestone_0/ft_printf
# Initialize submodules only for selected paths (depth 1 is optional)
git submodule update --init --recursive --depth 1 Milestone_0/ft_printfTip: You can add or remove paths with git sparse-checkout set <path...> anytime.
- Milestone 0 β Foundations: C basics, memory, file handling, CLI tools, Git.
- Milestone 1 β Algorithms: recursion, sorting/searching, performance basics.
- Milestone 2 β Systems: Unix tools, file descriptors, syscalls, processes.
- Milestone 3 β Design & Concurrency: multithreading, design patterns, advanced algorithms.
- Milestone 4 β Higher-level Topics: ML basics, graphics/game dev, databases.
- Milestone 5 β Scale & Networks: sockets, protocols, distributed systems, performance.
- Milestone 6 β Capstones: full-stack/large-scale projects, team/open-source work.
- After pulling new commits in the main repo:
git submodule update --init --recursive- Bring submodules up to their remote-tracking branches:
git submodule update --remote --mergeClick to expand
Check submodule status:
git submodule statusSee the commit recorded for a submodule:
git ls-tree HEAD <path_to_submodule>Update a submodule to the latest remote commit (merge into current):
git submodule update --remote --merge <path_to_submodule>Diff changes inside a submodule:
git diff --submodule=log <path_to_submodule>
# or within the submodule directory:
cd <path_to_submodule> && git status && git log --oneline -n 5Force init/update (if something got stuck):
git submodule update --init --force --recursive <path_to_submodule>Reset a submodule to the commit referenced by the superproject:
cd <path_to_submodule>
git fetch
git checkout <commit_hash> # the one shown by the superprojectRemove a submodule cleanly:
git submodule deinit -f -- <path_to_submodule>
git rm -f <path_to_submodule>
rm -rf .git/modules/<path_to_submodule>
# Also edit .gitmodules and .git/config if entries remainNote about GitHub submodule display: GitHub shows submodules as @ for clarity and reproducibility; this display cannot be customized.
Contributions are welcome!
- Fork the repo and create a feature branch.
- Make changes with clear commit messages.
- Ensure code builds/tests (if applicable).
- Open a Pull Request with a concise description.
Distributed under the MIT License. See LICENSE for details.
- Project42 for the curriculum and challenges.
- Open-source community for tools, docs, and inspiration.
- π Easy-to-use
- π¦ Modular
- π¬ Multilingual Support
- Clone the repository:
git clone https://github.com/username/repo.git
Distributed under the MIT License. See LICENSE for more information.
- Encourage others to contribute by providing guidelines.
Example:
## Contributing
Contributions are welcome! Please follow the [contribution guidelines](CONTRIBUTING.md).
## Usage
To run the application:
````bash
npm run start
## Installation
1. Clone the repo:
```bash
git clone https://github.com/username/repo.git
````
2. Install dependencies:
```bash
npm install
```
3. Start the application:
```bash
npm start
```
## π Documentation
- [Introduction](docs/introduction.md)
- [Setting Up Dual Repositories](docs/setup-dual-repo.md)
- [Contributing Guidelines](docs/contributing.md)
- [Project Structure Guide](docs/project-structure.md)
- [FAQ](docs/faq.md)
## Submodule utilities to debug
Given that submodules can sometimes be tricky to manage, here are some useful Git commands to help you debug and manage submodules effectively:
```bash
git submodule status
## Check what commits are recorded for these submdodules
git ls-tree HEAD <path_to_submodule>
## When submodule is not up to date
git submodule update --remote --merge
## To see the changes in the submodule
git diff <path_to_submodule>
## To force the submodule to a specific commit
git checkout <commit_hash>
## To force the checkout of the submodule
git submodule update --init --force --recursive <path_to_submodule>
## To remove a submodule
git submodule deinit -f -- <path_to_submodule>
## Then remove the submodule entry from .gitmodules and .git/config
git rm -f <path_to_submodule>
```
In GitHub's display of submodules, the naming convention includes both the submodule directory name and the specific commit hash (e.g., libft @ 9c61f8c). Unfortunately, you cannot change this display format directly on GitHub because it's how submodules are intended to work: they are designed to show the exact commit being referenced for clarity and reproducibility.
