Да, по-русски правильно: Алма-Ата. Эта форма закрепилась в русском языке, несмотря на то что по сути своей она ошибочна. История названия города такова: в 1854 году в урочище Алматы (в переводе с казахского 'яблочное') заложено укрепление, первоначально названное Заилийское, но вскоре получившее название Верное; позднее город Верный. В 1921 г. городу было решено вернуть национальное название, но вместо правильной формы Алматы в качестве официальной ошибочно принята форма Алма-Ата, где алма 'яблоко', ата 'отец'. Сейчас в Казахстане название города употребляется в форме Алматы, но в русском языке по-прежнему используется форма Алма-Ата.
Разные справочники дают разные рекомендации (подробнее см. в "Письмовнике"). На практике названия городов из двух слов, если они следуют после родового слова город, чаще не склоняют.
Правильно: в городе Гусиноозёрске.
Первый вариант по структуре предложения более логичен.
См. в «Письмовнике».
Правильно: в городе Осло.
См. в Горячей десятке вопросов.
Корректно: жил на другом конце города.
Возможен и склоняемый, и несклоняемый вариант.